如何綁定到該函數的右側?例如:Javascript:綁定到函數的右側?
var square = Math.pow.bindRight(2);
console.log(square(3)); //desired output: 9
如何綁定到該函數的右側?例如:Javascript:綁定到函數的右側?
var square = Math.pow.bindRight(2);
console.log(square(3)); //desired output: 9
您正在尋找部分函數,這些函數是別名方便的簡寫。
「經典」的方式做你問的是:
var square = function (x) {
return Math.pow(x, 2);
};
使用部分功能,這將是:
var square = Math.pow.partial(undefined, 2);
console.log(square(3));
不幸的是,Function.prototype.partial
不提供任何瀏覽器。
幸運的是,我一直在努力的東西,我認爲是必要的的JavaScript面向對象的功能,方法,類等等,這是Function.prototype.partial.js
庫:
/**
* @dependencies
* Array.prototype.slice
* Function.prototype.call
*
* @return Function
* returns the curried function with the provided arguments pre-populated
*/
(function() {
"use strict";
if (!Function.prototype.partial) {
Function.prototype.partial = function() {
var fn,
argmts;
fn = this;
argmts = arguments;
return function() {
var arg,
i,
args;
args = Array.prototype.slice.call(argmts);
for (i = arg = 0; i < args.length && arg < arguments.length; i++) {
if (typeof args[i] === 'undefined') {
args[i] = arguments[arg++];
}
}
return fn.apply(this, args);
};
};
}
}());
出了什麼問題:
var square = function(x) {return x*x;};
要正確地回答這個問題,你需要創建一組參數調用「綁定」功能的匿名功能,如:
var square = function(x) {return Math.pow(x,2);};
以這種方式,您可以綁定任意數量的參數,重新排列參數或兩者的組合。但是請記住,這會對性能產生一些影響,因爲每當你這樣綁定時,你都會向堆棧添加一個額外的函數調用。
你的意思是除了他要求別的東西嗎? – gdoron 2012-03-20 21:20:20
然後,我將不得不假設這是一個不好的例子,因爲這個答案很清楚地解決了給出的例子中的問題。 – 2012-03-20 21:21:01
給出的例子並不是要解決的問題,它只是一個例子,所以你可以理解我需要什麼。對不起,但這不會做到,儘管意圖是好的。 – MaiaVictor 2012-03-20 21:22:27
Function.prototype.bindRight = function() {
var self = this, args = [].slice.call(arguments);
return function() {
return self.apply(this, [].slice.call(arguments).concat(args));
};
};
var square = Math.pow.bindRight(2);
square(3); //9
我實際上期待使用標準庫或流行庫的實現。但似乎沒有,所以這是正確的答案。謝謝。 – MaiaVictor 2012-03-20 21:45:03
這看起來像你想部分應用。有許多庫提供,包括underscore.js:http://documentcloud.github.com/underscore/
Lodash的partialRight
會做你想要什麼,這裏是文檔:
This method is like _.partial except that partial arguments are appended to those provided to the new function. Arguments func (Function): The function to partially apply arguments to. [arg] (…*) : Arguments to be partially applied. Returns (Function): Returns the new partially applied function.
你可以用012做,通過傳遞_
作爲佔位符,稍後填寫的:
var square = _.partial(Math.pow, _, 2);
console.log(square(3)); // => 9
這項功能出現在2014年2月(下劃線1.6.0)。
我以前沒有見過這個答案。這實際上是最好的解決方案。謝謝。 – MaiaVictor 2012-04-10 18:08:29
另請參閱在@ brian-m-hunt中回答lodash下的partialRight()解答 – Offirmo 2016-05-09 10:23:03