我想能夠在javascript中合併對象和函數。目前,我有這樣的代碼:Javascript過載圓括號
var Functor = function(f, prop) {
var inst = function() {return inst.__op__.apply(this, arguments)}
inst.__op__ = f
for (var key in prop)
inst[key] = prop[key]
return inst
}
用法是這樣的:
var x = Functor(function(arg) {console.log(arg)}, {qwe:123})
console.log(x.qwe) // 123
x(321) // 321
但我有兩個問題:首先,我不喜歡複製從prop
參數屬性返回inst
,我像那裏有某種鏈接到prop
。其次,我想能夠在第一個Functor
參數地址獲得鏈接到inst
。看來我的問題可以通過new
關鍵字來改變Functor
的功能。但我無法弄清楚如何做到這一點。
重要特徵是,我是能夠改變__op__
財產(這是一種()
運營商的),我也可以結合的結果,並得到正確的行爲:
var x = Functor()
x.__op__ = console.log
var echo = x.bind(console)
echo(123) // 123
我將不勝感激,如果有人能夠幫助我有我的任何問題。
下面是使用代碼小提琴複製有:http://jsfiddle.net/avmhbyzr/
我很難理解你真的在這裏問什麼?也許如果你描述了你試圖解決的更高層次的問題,我們會更好地瞭解建議的內容與你現在正在做的不同。你可能還想閱讀[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),因爲這似乎是你在做什麼(描述一個問題與您嘗試的解決方案,而不是描述你試圖解決的實際問題)。 – jfriend00 2015-04-04 05:48:34
我全都回答X的問題(即使有Y)..但我確實同意更多的上下文會使'問題'/'問題'更加明顯。例如。爲什麼*是*複製的屬性?爲什麼*是* __op__'屬性,而不是直接關閉'f'?爲什麼'apply'中使用的返回閉包的'this'? – user2864740 2015-04-04 05:50:40
@ user2864740還沒有更高級別的問題,我只是想能夠做到這一點。 1)我複製屬性,因爲我不知道如何讓返回值具有這些屬性。這是我的問題之一。 2)我使用'__op__'是因爲我希望能夠更改'()'對我的值做什麼,這在最後一個示例中顯示。 3)我在那裏使用'this',這樣''調用我的值''調用,綁定,應用'綁定到'()'操作符的'this'(例如'console.log',除非綁定到'console')。 – 2015-04-04 06:01:29