call、apply、bind 区别

https://blog.csdn.net/u010176097/article/details/80348447  (更容易理解的方法)

1.为什么要用 call 、apply?
为了 改变方法里面的属性而不去改变原来的方法

function fruits() {}
 
fruits.prototype = {
    color: "red",
    say: function() {
        console.log("My color is " + this.color);
    }
}
 
var apple = new fruits;
apple.say();    //My color is red

     banana = {
 
    color: "yellow"
}
   }

apple.say.call(banana);         //My color is yellow
a
apple.say.apply(banana);    //My color is yellow

2.call 与apply 区别
1)call 参数固定 apply 参数不固定 apply 参数是放在数组里面的
2)call 可以将伪数组转换为真正的数组
例如一个例子:

    function log(){
         var args = Array.prototype.slice.call(arguments);
         args.unshift('(app)');
         console.log.apply(console, args);
   };
log("hello world");    //(app)hello world

  3)  bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。

   function show(sex){
    console.log("普通函数"+sex);
  }
  var person={
    name:"aa",
    age:14
  };
show.call(person,"男");
show.apply(person,["女"]);
//对于bind来说,用法更加的灵活
 show.bind(person,"不明")(
     );
// var ss=show.bind(person,"不明");
// ss();

 

posted @ 2019-01-08 17:37  蔚蓝海域234  阅读(278)  评论(0编辑  收藏  举报