CNode

问一个关于Javascript中bind函数的问题

问答
Zzhongao发布于12 年前最后回复12 年前2 回复3785 浏览0 收藏

先上代码

var foo = {
  message: 'Foooooooo'
};

var bar = {
  message: 'Barrrrrrr'
};

function say() {
  console.log(this.message);
}

say();
say.bind(foo)();
say.bind(foo).bind(bar)();
say.bind(foo).apply(bar);

// 执行之后如下
// undefined
// Foooooooo
// Foooooooo
// Foooooooo

我的问题是:为什么bind(foo)之后,不管是再bind其它对象,还是用apply改变this对象,都无法影响调用结果? 我个人理解为应该按最后bind或apply的this来调用才对啊。

查看回复

回复 (2)

T
tulayang#1·12 年前
Function.prototype.bind = function (ctx) {
    var args = Array.prototype.slice.call(arguments, 1);
    return function () {
	    return this.apply(ctx, args.concat(arguments));
	};
};
A
alsotang#2·12 年前
引用 tulayang

@tulayang 正解!

再 bind 已经无用,已被闭包锁死

参与回复
登录后即可参与回复。登录