我有一個簡單的Javascript「class」即時測試現在。我注意到,在我的私有函數中的「this」並不指向對象本身,而是指向全局範圍(窗口)。Javascript:調用私人函數時對象上下文丟失
爲什麼?
信息:我想保持模式私人,所以我用var模式,而不是this.mode。 我也想保持兩個內部函數私有,所以用戶無法訪問它。 我基本上使用.prototype將公共函數添加到訪問私有成員的myStorage中。
我的代碼:
var myStorage = function(mymode) {
var mode = mymode;
function privateFunctionA() {
// access this.mode to read mymode from constructor but
// this is pointing to window
};
function privateFunctionB() {
// access this.mode to read mymode from constructor but
// this is pointing to window
};
// check for indexeddb, websql and localstorage
if(mymode == 'A') {
privateFunctionA();
} else {
privateFunctionB();
}
};
myStorage.prototype.publicFunc = function() {
console.log(this.mode); // does this work?
}
var data = new myStorage();
['this' context](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this)確實與範圍無關,它會指向可以訪問其*屬性的對象。 'mode'是一個局部變量* - 對構造函數是私有的。所以不 - 你不能從原型函數訪問它。 – Bergi
'this'引用當前正在執行的函數的所有者對象。嚴格來說,在這種情況下,它是原型對象而不是'myStorage'。 – tiguchi