onistbin/blog

JavaScript基础知识

Opened this issue · 0 comments

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方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。三者之间的区别与联系一目了然。