我正在寫一個數據庫API的小包裝器來添加自定義功能。在JavaScript中轉發函數?
的view
功能我只想把,因爲它是和不能修改,所以我試圖將功能分配:
core.db.view = bucket.view;
的功能似乎工作,但有一個HTTP錯誤。如果我包裝的功能,一切工作正常,但我寧願只分配函數。
core.db.view = function (a, b, c) {
return bucket.view(a, b, c);
};
任何想法?
我正在寫一個數據庫API的小包裝器來添加自定義功能。在JavaScript中轉發函數?
的view
功能我只想把,因爲它是和不能修改,所以我試圖將功能分配:
core.db.view = bucket.view;
的功能似乎工作,但有一個HTTP錯誤。如果我包裝的功能,一切工作正常,但我寧願只分配函數。
core.db.view = function (a, b, c) {
return bucket.view(a, b, c);
};
任何想法?
下面的兩個電話之間唯一的區別是它們在執行方面:
core.db.view = bucket.view;
bucket.view() // 'this' will be bucket
core.db.view() // 'this' will be core.db
解決方案:
core.db.view = bucket.view.bind(bucket);
PS:bind方法的工作方式類似於您如何自己包裹的功能。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
在Javascript中
obj.method();
和
var m = obj.method; m();
是不同的東西。更具體地說什麼是this
值在執行過程中正文的方法有兩種不同的情況:第一種情況是this
將是obj
,在第二種情況下this
將是全局對象。
的溶液包裹方法調用在封閉:
var m = function(){return obj.method()};
這是他已經有的解決方案。他正在尋找一個解決方案,*不包括將其包裝在一個新的功能中。 –
從文本看來,我/他不明白**爲什麼**只是分配函數沒有工作。 'bind'基本上也包裝了這個函數(返回一個新的不同的對象,在設置上下文之後轉發該呼叫)。 – 6502
也許你需要做的'core.db.view = bucket.view.bind(桶);'? –
查看MDN關於'bind'的文章:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind。 – apsillers