使用javascript绑定函数

时间:2016-10-31 07:56:10

标签: javascript

我可以使用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中有这样的东西吗?

修改 我正在编写一个浏览器扩展,我需要绑定的函数是由我编写的,但是由浏览器调用。所以我无法改变参数的类型。

2 个答案:

答案 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

正如基思所说,如果不是更好的话,这是相同的。