我正在使用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}}。这是开展这项任务的最佳方式,还是广泛接受的?任何人都可以提供更好的解决方案吗?
谢谢大家。
答案 0 :(得分:9)
是的,这是公认的做法。请参阅范围this article或this question。
阅读关闭也可能会有所帮助。
答案 1 :(得分:4)
this
的值由javascript解释器在每个函数调用上设置,包括调用私有函数时。规则很简单:
object.method()
,则this
设置为方法内的对象。fn()
,this
设置为全局对象(在浏览器中通常为window
)。.apply()
或.call()
时,this
设置为这些函数的第一个参数(例如,您可以通过传递给{{1}的内容来控制它的设置}或.apply()
。因此,当您调用私人函数时,您将获得选项2.如果您想要访问对象的.call()
,则可以选择以下三个选项:
this
等方法调用,以便javascript解释器为您设置this.func2()
。this
或.call()
.apply()
来指示口译员根据需要设置func2.call(this)
。this
之类的内容调用this
之前,将func1()
的值存储在本地变量中,以便您可以通过闭包引用var self = this
内的self
。这在javascript中非常常见(利用闭包如何允许访问父作用域变量)。答案 2 :(得分:0)
除非您使用将其设置为其他变量之类的内容,否则您无法执行您想要的操作。因此要么重组所有内容,所以你不必这样做,或者只是使用变量。我想说使用变量
是可以接受的