我有一些 JS 代码,我想在其子方法中返回全局对象的实例(想想流畅的接口(interface)):
myGlobalVar = function() {
this.self = this;
this.Whatever = function() {
//return self; // why does that FAIL??
return this.self; // why does that WORK??
}
}
我本以为我会返回 self
但失败了。 return this.self
成功,但我认为子函数中的 this
会引用所述函数。为什么这有效?
最佳答案
在 javascript 中,函数中 this
的值由函数的调用者确定。
当您调用 obj.method()
时,this
的值会在 method()< 内部设置为
。因此,在上面的示例中,当您调用 obj
/myGlobalVar.Whatever()
时,Whatever()
内的 this
的值将是 myGlobalVar
因此要引用 sefl
,您可以使用 this.self
,正如您所发现的。
self
all 本身不起作用,因为它本身不是当前作用域中的变量。它是 myGlobalVar
的属性,因此当 this === myGlobalVar 时只能被引用为
。 JavaScript 不会自动检查当前对象的属性来解析符号。您只能通过专门引用托管属性的对象来访问对象的属性,如 myGlobalVar.self
或 this.self
this.self
中所示。
还有其他方法可以更改 this
的值。如果在没有 obj
上下文的情况下调用 Whatever()
,例如:
var fn = myGlobalVar.Whatever;
fn();
那么,this 的值要么是常规 JS 中的全局对象,要么是 JS 严格模式中的 undefined
。
每个函数上还有 .call()
和 .apply()
方法,允许您直接指定 this
的内容> 要设置为方法内部的值,如 myGlobalVar.Whatever.call(myOtherGlobalVar)
。
关于javascript - this.variable 与变量子作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273327/