call、apply、bind 區別

蔚藍海域234發表於2019-01-08

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();

 

相關文章