2013-11-20 44 views
0

我正在寫一個數據庫API的小包裝器來添加自定義功能。在JavaScript中轉發函數?

view功能我只想把,因爲它是和不能修改,所以我試圖將功能分配:

core.db.view = bucket.view; 

的功能似乎工作,但有一個HTTP錯誤。如果我包裝的功能,一切工作正常,但我寧願只分配函數。

core.db.view = function (a, b, c) { 
    return bucket.view(a, b, c); 
}; 

任何想法?

+3

也許你需要做的'core.db.view = bucket.view.bind(桶);'? –

+1

查看MDN關於'bind'的文章:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind。 – apsillers

回答

2

在Javascript中

obj.method(); 

var m = obj.method; m(); 

是不同的東西。更具體地說什麼是this值在執行過程中正文的方法有兩種不同的情況:第一種情況是this將是obj,在第二種情況下this將是全局對象。

的溶液包裹方法調用在封閉:

var m = function(){return obj.method()}; 
+0

這是他已經有的解決方案。他正在尋找一個解決方案,*不包括將其包裝在一個新的功能中。 –

+0

從文本看來,我/他不明白**爲什麼**只是分配函數沒有工作。 'bind'基本上也包裝了這個函數(返回一個新的不同的對象,在設置上下文之後轉發該呼叫)。 – 6502