請看下面的編輯! 我目前正在尋找一種方法來重載toString
方法動態生成的一個特定功能(由函數返回)。我知道我可以超載toString
功能Function.prototype
,但是這會超載全部toString
功能全部功能,我想避免這個。爲特定功能覆蓋toString
我的例子功能:
var obj = {
callme: function() {
return function() {
// Dynamically fetch correct string from translations map
return "call me, maybe";
}
}
}
// Binding callme to func, allowing easier access
var func = obj.callme.bind(obj);
console.log(func, func())
到目前爲止,我已經試過只把功能就像一個普通的JavaScript對象。
func.toString = function() {
return this();
}
這將導致Function.prototype.toString
仍然被調用,而不是func.toString
。
試圖訪問func.prototype
是不可能的,prototype
屬性是未定義的,因爲它是一個函數而不是對象。 覆蓋toString
的Function.prototype
不是一個選項,將func
更改爲一個對象也是不可能的,因爲它可能會制約與舊代碼部分的兼容性。
編輯:以上的企圖顯然不工作,因爲我重寫功能func
的toString
,而不是返回功能的toString
。現在有個更好的問題:是否有一種優雅的方式來覆蓋由func
返回的所有功能的toString
,以便它們「共享」相同的toString
。 (意味着我不必指定toString
每一個返回的函數。)
奇怪。我正在建議'func.soString ='... –
你能詳細說明它是如何工作的嗎?它似乎在這裏工作:http://jsfiddle.net/AwDbm/ – jrajav
所以你說你不能重寫'func.prototype.toString = function(){}'? – epascarello