2
這一直困擾着我。看看下面的代碼:保存分配給實例方法的變量的上下文
function tSt(val) {
this.val = val;
}
tSt.func = function(x) {
return x * 2;
}
tSt.prototype.func = function() {
return tSt.func(this.val);
}
var tmp = new tSt(5);
console.log(tmp.func()); // 10
var other = tmp.func;
console.log(other()); // undefined
我希望能夠做到這一點的原因是類似以下情形:
(function(funcarr) {
for (var i = 0; i < funcarr.length; i++)
console.log(funcarr[i]());
})([ tmp.func ]);
這又如何實現呢?
更新:
這裏有一個潛在的更具全球性的解決辦法,但我不知道是否有任何缺點做這種方式:
哇,那很快。該解決方案有效。介意看看我的更新並讓我知道你的想法? –
已更新的示例有效,但它失去了原型繼承的好處,因爲現在您正在爲每個'tSt'實例創建一個單獨的'func'屬性。 'func'恰好與'tSt.prototype.func'有關,但這真的不相關,因爲沒有調用者會看到原型繼承的'func',只是你的新實例特有的。換句話說,你的代碼和'this.func =(function(x){return x * 2})。bind(this);'是一樣的。 – Domenic
有意義,但如果我希望能夠簡單地將'other.func'作爲函數參數而不是'other.func.bind(tmp)'來傳遞,那麼就有必要放棄這個好處。謝謝您的幫助。 –