call、apply和bind的用法

在JavaScript中,callapplybindFunction對象自帶的三個方法

共同點:

(1) 都是用來改變函數的this對象的指向的

(2)第一個參數都是this要指向的對象,也就是想指定的上下文

(3)都可以利用後續參數傳參

區別:

bind 是返回對應函數,便於稍後調用;apply 、call 則是立即調用

 

1. call

call([thisObj[,arg1[, arg2[, [,.argN]]]]])

定義:調用一個對象的一個方法,以另一個對象替換當前對象。

說明:call 方法可將一個函數的對象上下文從初始的上下文改變爲由 thisObj 指定的新對象

用法:

function Animal(name){   
  this.name=name;   
  this.showName=function(){   
    console.log(this.name);   
  }   
}   
function Dog(name){   
  Animal.call(this,name);   // 可視爲繼承Animal
}   
var dog=new Dog("Crazy dog");      
dog.showName();    // Crazy dog

2. apply

apply([thisObj[,argArray]])

說明:如果 argArray 不是一個有效的數組或者不是 arguments 對象,那麼將導致一個 TypeError。
如果沒有提供 argArray 和 thisObj 任何一個參數,那麼 Global 對象將被用作 thisObj, 並且無法被傳遞任何參數。 

function class1(args1,args2){       
  this.name=function(){      
   console.log(args,args);      
  }     
}     
function class2(){    
  var args1="1";
  var args2="2";
  class1.call(this,args1,args2);  
  /*或*/
  class1.apply(this,[args1,args2]);
}

var c=new class2();   
c.name();
  •  bind

MDN的解釋是:bind()方法會創建一個新函數,稱爲綁定函數,當調用這個綁定函數時,綁定函數會以創建它時傳入 bind()方法的第一個參數作爲 this,傳入 bind() 方法的第二個以及以後的參數加上綁定函數運行時本身的參數按照順序作爲原函數的參數來調用原函數。

注意:bind方法的返回值是函數

var bar=function(){   
  console.log(this.x);   
}
var foo={ 
     x:3   
}   
bar();     // undefined
bar.bind(foo)();    // 3
 /*或*/
var func=bar.bind(foo);   
func();

 

 

 

原文:https://www.cnblogs.com/libin-1/p/6069031.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章