1
我遇到了問題,我需要傳遞一個對象的方法作爲回調,並且該方法使用this
。顯然這是行不通的,因爲當作爲回調調用時(不是通過擁有對象)this
會指向全局對象。將對象的方法作爲回調傳遞的最佳或最常用的方法是什麼?
我讀過關於這個問題的解決方案,我在想最好或最常見的是什麼。
目前,我的 '階級' 是這樣的:
function MyClass(value) {
this.value = value;
}
MyClass.prototype.alertValue = function() {
alert(this.value);
};
選項A - 更改類看起來像這樣:
function MyClass(value) {
this.value = value;
this.alertValue = function() {
alert(value);
};
}
的優點 - 簡單。但缺點是alertValue
將被複制到每個實例上,這就是我們通常將方法放在prototype
上的原因。
選項B - 使用.bind()
:
callbackReceivingFunction(myObject.alertValue.bind(myObject));
我可以寫這樣的實用方法:
function bind(object, methodName) {
return object[methodName].bind(object);
}
什麼來解決這個問題最常用的方法?它有什麼優點和缺點?我提出的兩種方式看起來都很不雅,還有另一種方式嗎?
你能舉一些實際的例子?我認爲提供對象非靜態方法作爲回調是不直觀的。回調通常是更普遍的東西,就像一個函數,而不是綁定到任何特定的對象。這就像一個動作。 – 2015-02-11 22:20:13
使用'bind'不雅?這是它應該涵蓋的教科書情況之一。 – Jon 2015-02-11 22:24:54
@Jon所以就像'功能(myObject.alertValue.bind(myObject));'常見和認爲沒關係? – 2015-02-11 22:26:35