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