Javascript 在类方法中使用此关键字
为什么我将此值作为[对象窗口]来获取?它是一个窗口对象吗?这是因为init不是一个“类方法”——它是一个在构造函数中定义和调用的函数。这并不意味着它对其他函数有任何特殊性 您需要在mC函数的“this”上下文中调用init函数:Javascript 在类方法中使用此关键字,javascript,Javascript,为什么我将此值作为[对象窗口]来获取?它是一个窗口对象吗?这是因为init不是一个“类方法”——它是一个在构造函数中定义和调用的函数。这并不意味着它对其他函数有任何特殊性 您需要在mC函数的“this”上下文中调用init函数: var mC = function(map){ var init = function(iMap){ alert("Init " + this + " with"); } init(map); }; var m = new mC(
var mC = function(map){
var init = function(iMap){
alert("Init " + this + " with");
}
init(map);
};
var m = new mC({});
或者,您需要使'init'成为this或this.prototype的成员,这将自动使用它所属的对象作为'this'
如果这让你感到困惑,你可能想用谷歌搜索一下JavaScript的this关键字:)这是因为init不是一个“类方法”——它是一个在构造函数中定义和调用的函数。这并不意味着它对其他函数有任何特殊性 您需要在mC函数的“this”上下文中调用init函数:
var mC = function(map){
var init = function(iMap){
alert("Init " + this + " with");
}
init(map);
};
var m = new mC({});
或者,您需要使'init'成为this或this.prototype的成员,这将自动使用它所属的对象作为'this'
如果这让你感到困惑,你可能想用谷歌搜索一下JavaScript的this关键字:)你还希望得到什么
您将init定义为一个函数,然后在全局空间中调用它,这就是为什么您得到了您所做的。您没有将其附加到mC类。您还希望得到什么
您将init定义为一个函数,然后在全局空间中调用它,这就是为什么您得到了您所做的。您没有将其附加到mC类。是的!由于
init
是mC
的一个变量,它将共享其作用域(当前是全局作用域,也是窗口
对象)
不过。如果更改为以下内容:
init.call(this);
然后
这个在init
里面将是对您实例的引用。是的!由于init
是mC
的一个变量,它将共享其作用域(当前是全局作用域,也是窗口
对象)
不过。如果更改为以下内容:
init.call(this);
然后,init中的this
将是对您实例的引用。另请参见:另请参见:它是关于如何调用函数的,例如init()
,没有基本对象(不作为任何可访问对象的属性绑定),因此它中的这个值将指向全局对象,无论您在作用域链中的什么位置。它是关于函数如何调用的,例如init()代码>,没有基本对象(未绑定为任何可访问对象的属性),因此它中的此值将指向全局对象,无论您在范围链中的何处。