我可以使用bind()
来绑定函数和参数。
例如,outputTwo()
需要两个参数。我用一个参数绑定它,然后我只需要在调用时传递一个参数。看起来像:
<script>
function outputTwo(param1, param2) {
console.log(param1, param2);
}
var boundOutput = outputTwo.bind(null, "what"); // the first param should be an object, to replace <this> object in function, which not needed in our question
boundOutput("the heck?");
</script>
它将输出What the heck?
。
问题是:我可以将第二个参数绑定到outputTwo()
,没有绑定第一个参数吗?
在C ++中,有一些名为placeholders
的东西。当我需要绑定param2而不绑定param1时,我需要将placeholder
传递给param1,如下所示:
auto boundOutput = std::bind(outputTwo, std::placeholders_1, "the heck?");
boundOutput("what");
它将输出What the heck?
。在javascript中有这样的东西吗?
修改 我正在编写一个浏览器扩展,我需要绑定的函数是由我编写的,但是由浏览器调用。所以我无法改变参数的类型。
答案 0 :(得分:1)
你可以,但它不会那么好:
Motorcycle
如果你想让它成为函数对象的一个方法,你可以用const bindLast = (fn, this, ...lastArgs) =>
(...firstArgs) => fn.call(this, [...firstArgs, ...lastArgs]);
做类似的事情,我一般不喜欢这样做。
用法:
Function.prototype
答案 1 :(得分:-1)
/** www.lsauer.com 2011
* http://www.lsauer.com/2011/08/javascript-using-placeholders-s-d-in.html
*/
var r = (r||{
t : "check",
m : "mate",
c: 10.10
});
console.log('It is '+r.t+r.m+' for Player A. Game Stat:'+r.c);
//By using placeholders, the same example statement can be written more clearly, as follows:
console.log('It is %s%s for Player A. Game Stat: %d',r.t, r.m, r.c);
来源:https://gist.github.com/lsauer/2850506
正如基思所说,如果不是更好的话,这是相同的。