在Javascript中,将已绑定函数的更多参数绑定。

20 浏览
0 Comments

在Javascript中,将已绑定函数的更多参数绑定。

我试着整理一下关于javascript的bind()方法的思路。

我发现如果我这样做:

var f = function (a) { ... }
var g = f.bind(obj);
g(1)

那么f将以obj作为this,以1作为a来调用。

我原以为g是f的一个包装函数。

但是当我这样做:

var f = function (a) { ... }
var g = f.bind(obj);
g.call(1)

那么f将以1作为this,而a则是未定义的。

所以看起来g不仅仅是一个简单的包装函数,而是call方法在普通函数和绑定函数之间有所区别。

还有一点是我不能多次部分应用一个函数。

var f = function (a) { ... }
var g = f.bind(obj);
var h = g.bind(1);
h();

然后f将以obj作为this,而a则是未定义的。

这种行为的原因是什么?

编辑

这个问题中的构造实际上是错误的,请参考接受的答案以了解它们应该是什么样子的(通常我没有注意到callbind总是需要上下文参数作为第一个参数)。

0