在阅读之前请不要将其标记为重复。我对这个主题有很好的理解,我甚至写了一篇文章about it!
然而,下面的代码让我感到困惑,我认为这不是你认为的问题; - )
我有以下代码。
function Test(name) {
this.name = name;
this.f1();
}
Test.prototype.f1 = function() {
console.log('[Function f1] Is Test = ' + (this instanceof Test) + ', name = "' + this.name + '"');
var f = this['f2'];
f();
// f2(); works!
// this['f2'](); works as well!
};
Test.prototype.f2 = function() {
console.log('[Function f2] Is Test = ' + (this instanceof Test) + ', name = "' + this.name + '"');
};
var t = new Test('Mike');
运行代码会产生
[Function f1] Is Test = true, name = "Mike"
[Function f2] Is Test = false, name = "undefined"
所以当调用函数时(不可否认)奇怪的方式会失去this
的范围。
我总是可以f.apply(this)
这可以工作,但我真的想了解这里发生了什么。
任何线索?