首先说明call / apply / bind 三者的相同点
1.都是改变函数的this对象的指向;
2.传入参数都可以是多个,第一个是this所要指向的对象
接下来 举一个例子简单说明一下三者的不同
var sun = {
name: "sun",
say: function (home) {
console.log(this.name + ',' + home);
}
}
var jay = {
name: "jay"
}
sun.say("China");
很容易知道结果就是 sun,China
那么如何用xw的say方法来显示xh的数据呢。
对于call可以这样:
sun.say.call(jay);
对于apply可以这样:
sun.say.apply(jay);
而对于bind来说需要这样:
sun.say.bind(jay)();
如果直接写sun.say.bind(jay)是不会有任何结果的,看到区别了吗?call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。
那么call和apply有什么区别呢
我们看到上面的例子中sun 的say 方法里有一个 “home”参数
那么,就是三者后续参数的传入有所区别
对于call来说是这样的
sun.say.call(jay,”youdo”);
而对于apply来说是这样的
sun.say.apply(jay,[“youdo”]);
看到区别了吗,call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。
那么bind怎么传参呢?它可以像call那样传参。
sun.say.bind(jay,”youdo”);
但是由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。
sun.say.bind(jay,”youdo”)();
可以知道,三者结果都是 jay, yudou
本文详细解释了JavaScript中call、apply及bind三个方法的作用及区别,通过实例演示了如何使用这三个方法来改变函数内部this的指向,并展示了它们在参数传递方面的不同。
478

被折叠的 条评论
为什么被折叠?



