编辑:我必须道歉,我发布的问题实际上并不存在于我发布的代码中,因为我过于简化了它。我稍后会尝试发布一些内容。
删除也可以,但是目前答案太多,我自己做不到。
编辑2:好的,这里是:
让,
function F() {
this.field = "value" ;
var init = function(value) {
this.field = value ;
} ;
this.method = function() {
return this.field ;
} ;
init( arguments[0] ) ;
}
现在,F
类型的实例化,
var f = new F("newValue") ;
将从闭包调用时将值设置为 Window
对象,因为 this
指向它。
将this
绑定(bind)到函数
,
function F() {
var self = this ;
this.field = "value" ;
var init = function(value) {
self.field = value ;
} ;
this.method = function() {
return this.field ;
} ;
init( arguments[0] ) ;
}
将解决问题。
不过,这是什么原因——恕我直言——奇怪的行为?
最佳答案
这是调用函数的对象(对其的引用)。
因此,在您的 f.method()
调用中,this
是“f”。不是“F”。
var self = this;
起作用的事实不是由于该语句本身,而是由于 method2()
是 closure
更具体地说,method2()
内的变量 self
的作用域由 F()
确定 - 换句话说,“method2()
中的 self"将始终引用定义“F”时存在的 self
的值(当时当然是“F”,因为此时当前对象上下文为“F”)。
关于javascript - Javascript "this"运算符如何处理范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3961678/