淺談js中call,apply,bind的區別

Call、 apply 區別,原生實現 bind Call、apply、bind都是改變this指向的,其中call的話是通過第一個參數來 改變this指向,函數在傳參的時候一個一個進行傳參,apply也是通過第一個參 數改變this指向,函數傳參的時候通過數組或是一組的形式進行傳參,而且他 只能用於函數的調用時候,而bind呢不能用於函數的標準調用傳參,只能是事 件或是方法的後邊進行改變this的指向
他們都是用來改變this指向的。

call:改變this指向 函數被執行了
call(上下文環境,參數)
上下文環境:就是我們想到call的對象
第二個是用來傳參數 的 我們同事也要在上面的函數上面來接收 然後返回的就是 我們傳遞過去的參數。

var msg="今天吃了個雞腿";
var obj={
  msg:"今天有點兒不開心"

}
function getData(data){
//在這裏 我們接收傳遞過來的參數後 賦值給msg返回回來的時候  也是可以的 
  this.msg=data;
    return this.msg
    
  }
 //如果我們不用call的話 他就會默認找到window 
 //第一個是我們要改變的對象,第二個是我麼要傳遞的參數
var data=getData.call(obj,"哈哈");

console.log(data);//結果返回的是“哈哈”
// 全局調用的話我們的this指向等於window
// 我們如何能讓我們this指向當前這個函數
// 我們需要用到call  想上面這樣 可以改變this指向  

apply :

和call相似度很高!!! 有一點注意的是 我們要用數組來進行傳參

var msg="今天吃了個雞腿";
var obj={
  msg:"今天有點兒不開心"

}
function getData(data){
  this.msg=data;
    return this.msg
    
  }
 
var data=getData.apply(obj,["哈哈"]);
console.log(data);

// 我們在使用apply時候報錯了 

//  告訴我們要創建一個類數組,只需要給我們傳遞過去的數據 用數組括起來皆可以啦

特點也同上!!改變了this指向 也能函數 執行

bind :

能改變this指向但是:

bind時候 後臺給我們返回了一個函數,但是這個函數並未執行

ƒ getData(data){
  this.msg=data;
    return this.msg
    
  }

在reach中我們通常用bind來改變 this指向。
如何讓函數被執行 只需要在後面加一個小括號
要用兩個小括號 來 調用

var msg="今天吃了個雞腿";
var obj={
  msg:"今天有點兒不開心"
}
function getData(data){
  this.msg=data;
    return this.msg    
  }
 //在這裏面我們 用一個小括號 來實現函數的執行
 //這一 bind也不能用數組傳參 是 逗號的方式傳參
var data=getData.bind(obj,"哈哈")();
console.log(data);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章