繁体   English   中英

这个关键字在类方法中

[英]this keyword in a class method

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

为什么我以[对象窗口]的形式获得价值? 它是窗口对象吗?

这是因为init不是“类方法”-它是您在构造函数中定义和调用的函数。 但这丝毫没有使其其他功能独树一帜。

您将需要在mC函数的“ this”的上下文中调用init函数:

init.call(this);

或者,您需要使“ init”成为this或this.prototype的成员,这会自动将其所属的对象用作“ this”

如果这使您感到困惑,您可能想在Google上搜索JavaScript的this关键字

您还期望得到什么?

您将init定义为一个函数,然后在全局空间中对其进行调用,这就是为什么要完成您的工作的原因。 您没有将其附加到mC类。

是! 由于initmC的变量,它将共享其作用域(当前是全局作用域,它也是window对象)。

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

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

然后, this init内部init将引用您的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM