JavaScript基础知识
Opened this issue · 0 comments
onistbin commented
1.call、apply、bind
1.这三者都是用来改变函数的this对象的指向的。
2.第一个参数都是this要指向的对象。
3.都可以利用后续参数传参。
call,apply,bind都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply,bind属性.既然作为方法的属性,那它们的使用就当然是针对方法的了.这三个方法是容易混淆的,因为它们的作用一样,只是使用方式不同。
var jianbing = {
name: "尖冰",
say: function(company, address){
console.log(this.name, company, address);
}
}
var ty = {
name: "ty19105"
}
jianbing.say('Qihoo360', 'beijing'); // 尖冰 Qihoo360 beijing
jianbing.say.call(ty, 'Qihoo360', 'beijing'); // ty19105 Qihoo360 beijing
jianbing.say.apply(ty, ['Qihoo360', 'beijing']); // ty19105 Qihoo360 beijing
jianbing.say.bind(ty)('Qihoo360', 'beijing'); // ty19105 Qihoo360 beijing
jianbing.say.bind(ty, 'Qihoo360', 'beijing')(); // ty19105 Qihoo360 beijing
call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。三者之间的区别与联系一目了然。