类方法中的这个关键字

时间:2010-07-28 07:22:52

标签: javascript

var mC = function(map){
    var init = function(iMap){
        alert("Init " + this + " with");
    }
    init(map);
};
var m = new mC({});

为什么我将此作为[对象窗口]获得价值?它是一个窗口对象??

3 个答案:

答案 0 :(得分:1)

这是因为init不是“类方法” - 它是你在构造函数中定义和调用的函数。这并没有以任何方式使其他功能与众不同。

你需要在mC函数'this'的上下文中调用init函数:

init.call(this);

或者,你需要让'init'成为this或this.prototype的成员,它将自动使用它作为'this'成员的对象

如果这让您感到困惑,可能需要谷歌关于JavaScript这个关键字:)

答案 1 :(得分:1)

你还期待什么?

您将init定义为函数,然后在全局空间中调用它,这就是您完成所做操作的原因。您没有将它附加到mC类。

答案 2 :(得分:1)

是的!由于initmC的变量,因此它将共享其范围(当前是全局范围,也是window对象)。

然而。如果您更改为以下内容:

var mC = function(map){
    this.init = function(iMap){
        alert("Init " + this + " with");
    }
    this.init(map);
};
var m = new mC({});

然后this内的init将是对您的实例的引用。