在特殊的Javascript调用约定中丢失了“this”的范围

时间:2016-02-22 08:45:37

标签: javascript scope this

在阅读之前请不要将其标记为重复。我对这个主题有很好的理解,我甚至写了一篇文章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)这可以工作,但我真的想了解这里发生了什么。

任何线索?

0 个答案:

没有答案