【发布时间】:2012-09-13 16:29:26
【问题描述】:
“this 关键字总是指包含函数作为方法的对象。”
太好了,听起来很简单,但这就是我想知道的......
例如:
function func1() {
function func2() {
alert(this == window); // true
}
func2();
alert(this == window); // true
}
func1.func3 = function () {
alert(this == window); // false
alert(this == func1); // true
};
func1();
func1.func3();
现在,因为 func1 实际上是 global (window) 对象的方法(分配给 global 的属性 func1 的函数对象对象)在func1 内部的this 是有意义的,它指的是全局 对象,并且由于func3 是func1 的函数对象的方法,因此内部的this 是有意义的func3 指的是func1 的函数对象。
困扰我的是func2。我知道嵌套函数中的 this 也应该引用 global 对象,但我不知道为什么因为 func2 不是 global 的方法> 对象。据我了解(这是我可能完全错误的部分)func2 是func1 的调用(激活/变量)对象的方法。现在,如果我对此是正确的(我不确定我是否正确),那么在 func2 中的 this 不应该引用 func1 的调用对象而不是 global 对象?
所以,我想我的问题是:嵌套函数是它所嵌套的函数的调用(激活)对象的方法吗?如果是这样,this 不应该引用该调用对象而不是全局对象?
【问题讨论】:
-
您对
this的“定义”不完整。阅读developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/… -
函数的context (
this) 在执行时 确定,其值depends on how the function invoked 用于该特定执行。如果以不同的方式(例如,作为对象的方法,从call或apply等)调用,则特定函数中this的值可能会因调用而异。 -
@RobW 好吧,我确实在互联网上找到了几篇使用此关键字定义的文章,但我想它们可能是错误的,但我仍然想知道嵌套函数部分跨度>
标签: javascript this