var mC = function(map){
var init = function(iMap){
alert("Init " + this + " with");
}
init(map);
};
var m = new mC({});
爲什麼我得到這個值作爲[object window]?它是一個窗口對象嗎?這個關鍵字在一個類中的方法
var mC = function(map){
var init = function(iMap){
alert("Init " + this + " with");
}
init(map);
};
var m = new mC({});
爲什麼我得到這個值作爲[object window]?它是一個窗口對象嗎?這個關鍵字在一個類中的方法
是的!因爲init
是一個變量mC
,它將共享其範圍(當前是全局範圍,也是window
對象)。
但是,如果你改變爲如下:
var mC = function(map){
this.init = function(iMap){
alert("Init " + this + " with");
}
this.init(map);
};
var m = new mC({});
然後this
內init
將您的實例的引用。
這是關於如何調用該函數,例如'init();',沒有*基對象*(沒有綁定爲任何可訪問對象的屬性),所以它內的this值將指向全局對象,而不管* scope *鏈中的哪個位置你是。 – CMS 2010-07-28 08:02:21
這是因爲init不是一個「類方法」 - 它是你在構造函數中定義和調用的函數。這並沒有以任何方式使其與其他功能相關。
您需要調用在MC功能的「本」的背景下,初始化函數:
init.call(this);
或者,你將需要進行「初始化」的這個或this.prototype的會員,這會自動使用它作爲一個成員對象「這個」
您可能需要google一下JavaScript的這個關鍵字,如果這混淆了:)
還有什麼你會被期待得到什麼?
你將init定義爲一個函數,然後在全局空間中調用它,這就是爲什麼你得到了你所做的。你沒有把它附加到mC類。
另請參閱:http://stackoverflow.com/questions/3320677/this-operator-in-javascript/ – CMS 2010-07-28 07:56:56