分配';这';添加到Javascript中的变量

分配';这';添加到Javascript中的变量,javascript,this,Javascript,This,我采用面向对象的Javascript方法,原因有二。第一,因为它帮助我学习,第二,以防我的代码被分发 我已经将函数分配给变量,并将此用于公共变量。然而,我在使用这个时遇到了问题。当我在“private”函数中时,此引用不同的作用域,我无法访问此下的变量。我来说明我的观点 var ClassObject = function() { this.var1 = 'Hello'; var var2 = 786; this.func1 = function() { alert(th

我采用面向对象的Javascript方法,原因有二。第一,因为它帮助我学习,第二,以防我的代码被分发

我已经将函数分配给变量,并将此用于公共变量。然而,我在使用
这个
时遇到了问题。当我在“private”函数中时,
引用不同的作用域,我无法访问
下的变量。我来说明我的观点

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
。这是完成这项任务的最佳方式,还是被广泛接受?有谁能提供更好的解决方案吗


谢谢大家。

除非您使用类似于将其设置为另一个变量的方法,否则您不能做您想做的事情。所以,要么重新构造一切,这样你就不必这么做,要么就使用变量。我认为使用变量是可以接受的是的,这是公认的做法。请参阅范围或


阅读闭包也可能有帮助。

的值由javascript解释器在每次函数调用时设置,包括在调用私有函数时。规则相当简单:

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

  • 使那些私有函数成为方法(它们将不再是私有的),并将它们作为方法调用,如
    this.func2()
    ,这样javascript解释器就会为您设置
    this
  • 使用
    .call()
    .apply()
    func2.call(this)
    指示解释器根据需要设置
    this
  • 在使用类似于
    var self=this
    的方法调用
    func1()
    之前,将
    this
    的值存储在局部变量中,这样您就可以通过闭包引用
    self
    内部的
    func1()
    。这在javascript中非常常见(利用闭包如何允许访问父范围变量)

  • 简短回答:是的,这是完全可以接受的。我已经看到变量
    self
    用于此目的:
    var self=this;
    好吧,这很简单。谢谢大家,@Casey和TMP,还有其他人。我还没有研究过
    .call()
    .apply()
    ,但我现在会的。谢谢。您的链接非常有用。谢谢。