js-apply call bind 浅析

作用一:将对象的方法借用给另一个对象使用。

使用案例一 区分 bind 和 apply和call 的区别:// 对象一

var boyA= {
    name:"张无忌",
    age:20,
    hobby:["撩妹","打太极","游山玩水"],
    say:function(){
        return '在下' + this.name + ',今年'+this.age 
    }
}
// 对象二
boyB ={
  name:"令狐冲",
  age:21,
  hobby:["喝酒","练剑","赌博"]
}

// 在此新建了两个对象,如果想让boyB对象拥有boyA对象的say方法,该则么操作呢?
// 使用 call 方法
boyA.say.call(boyB)

// 使用 apply 方法
boyA.say.apply(boyB);

// 使用 bind 方法  注意后面的 () 号
boyA.say.bind(boyB)()  // 由此表现 bind 与 apply和call 的区别
 

使用案例二: 区分 apply 和 call 的区别  传递参数

var boyA={    
    name:"张无忌",
    age:20,  
    hobby:["撩妹","打太极","游山玩水"],
    say:function(gongfu,war){ 
        return '我是' + this.name + ',今年'+this.age + '岁,我的拿手功夫是:'+ gongfu + ',成名战 -- '+ war 
    } 
}; 
boyA.say('九阳神功','六大派围攻光明顶') 
// "我是张无忌,今年20岁,我的拿手功夫是:九阳神功,成名战 -- 六大派围攻光明顶"

// 第一对象的方法中传递了两个参数
var boyB ={
  name:"令狐冲",
  age:21,
  hobby:["喝酒","练剑","赌博"]
} 

// 对象 boyB 借用对象 boyA 的方法,同时接收参数
// 使用 call 接收参数
boyA.say.call(boyB,'雨夜山神庙','独孤九剑');

// 使用 apply 接收参数
boyA.say.apply(boyB,['雨夜山神庙','独孤九剑']);  // 使用数组接收参数

// 使用 bind 接收参数
boyA.say.bind(boyB)('雨夜山神庙','独孤九剑');
// 但是由于bind返回的仍然是一个函数,所以我们可以在调用的时候在进行传参

boyA.say.bind(boyB,'雨夜山神庙','独孤九剑')();

 

 

 

未完     -- 待续 --

posted @ 2019-10-15 17:55  小小黑加白  阅读(104)  评论(0编辑  收藏  举报