在Javascript中将“this”赋给变量

时间:2012-08-08 05:08:20

标签: javascript this

我正在使用Javascript采用面向对象的方法,原因有两个。一,因为它有助于我学习,两个,以防万一我的代码将被分发。

我已经为变量分配函数,并使用this作为公共变量。但是,我在使用this时遇到了问题。当我处于“私有”功能时,this指的是不同的范围,我无法访问this下的变量。我会说明我的观点。

var ClassObject = function() {
  this.var1 = 'Hello';

  var var2 = 786;

  this.func1 = function() {
    alert(this.var1); // Alerts Hello
    alert(var2); // Alerts 786
  }

  var func2 = function() {
    alert(this.var1); // Alerts undefined
    alert(var2); // Alerts 786
  }
}

我发现func2 this.var1访问this的唯一方法是将另一个变量分配给var c = this:{{1}}。这是开展这项任务的最佳方式,还是广泛接受的?任何人都可以提供更好的解决方案吗?

谢谢大家。

3 个答案:

答案 0 :(得分:9)

是的,这是公认的做法。请参阅范围this articlethis question

阅读关闭也可能会有所帮助。

答案 1 :(得分:4)

this的值由javascript解释器在每个函数调用上设置,包括调用私有函数时。规则很简单:

  1. 如果调用object.method(),则this设置为方法内的对象。
  2. 如果调用普通函数(无论是全局函数还是本地函数),如fn()this设置为全局对象(在浏览器中通常为window)。
  3. 使用.apply().call()时,this设置为这些函数的第一个参数(例如,您可以通过传递给{{1}的内容来控制它的设置}或.apply()
  4. 因此,当您调用私人函数时,您将获得选项2.如果您想要访问对象的.call(),则可以选择以下三个选项:

    1. 制作那些私有函数方法(它们将不再是私有函数)并将其作为this等方法调用,以便javascript解释器为您设置this.func2()
    2. 使用this.call() .apply()来指示口译员根据需要设置func2.call(this)
    3. 在使用this之类的内容调用this之前,将func1()的值存储在本地变量中,以便您可以通过闭包引用var self = this内的self 。这在javascript中非常常见(利用闭包如何允许访问父作用域变量)。

答案 2 :(得分:0)

除非您使用将其设置为其他变量之类的内容,否则您无法执行您想要的操作。因此要么重组所有内容,所以你不必这样做,或者只是使用变量。我想说使用变量

是可以接受的