JS中call,apply,bind方法的總結

2022-04-12 13:08:59 字數 1296 閱讀 8183

一般用來指定this的環境,在沒有學之前,通常會有這些問題。

var a =

}var b =a.fn;

b();

// undefined

我們是想列印物件a裡面的user卻列印出來undefined是怎麼回事呢?如果我們直接執行a.fn()是可以的。

var a =

}a.fn();

//小馬扎

這裡能夠列印是因為,這裡的this指向的是函式a,那為什麼上面的不指向a?我們如果需要了解this的指向問題。

雖然這種方法可以達到我們的目的,但是有時候我們不得不將這個物件儲存到另外的乙個變數中,那麼就可以通過以下方法。

var a = 

} var b = a.fn;

b.call(a);  //

小馬扎

通過call方法,給第乙個引數新增要把b新增到哪個環境中,簡單來說,this就會指向那個物件。

call方法除了第乙個引數以外還可以新增多個引數,如下:

var a =

}var b =a.fn;

b.call(a,

1, 2); //

小馬扎 3

var a =

}var b =a.fn;

//小馬扎

var a =

}var b =a.fn;

10, 1]); //

小馬扎 11

var a =}}

var b =a.fn;

null);

先來說說它們的不同吧。

var a =

}var b =a.fn;

b.bind(a);

console.log(b.bind(a));

//ƒ ()

那麼我們現在執行一下函式c看看,能不能列印出物件a裡面的user

var a =

}var b =a.fn;

var c =b.bind(a);

c();

//小馬扎

ok,同樣bind也可以有多個引數,並且引數可以執行的時候再次新增,但是要注意的是,引數是按照形參的順序進行的。

var a =

}var b =a.fn;

var c = b.bind(a,10

);c(

1,2); //

小馬扎 10 1 2

This學習實現call apply bind

不說太多,直入主題 由淺入比淺深一點 function test str let obj 才疏學淺,歡迎補充與建議 實現步驟 只在函式上實現該功能 確定所傳物件有效 將當前函式this繫結到該物件上 執行該物件繫結的此函式 function.prototype.mycall function con...

如何模擬實現乙個call apply bind函式

call模擬實現 首先我們實現繫結this功能。比如我們有乙個foo函式 function getname 還有乙個wechat物件 const wechat 我們希望實現 getname.call wechat fedaily以wechat和getname這個為例,這裡的this即getname,...

js之旅(七)js中this

本文講述js中this的指向 介紹es5和es6中this的不同 在js es5中,使用的是function函式,誰在呼叫function,this就指向誰,有以下幾個特點 1.1 this最終指向的是呼叫它的物件 這個特點的就是es5中this的指向,其它特點都是對它的補充,如下示例 functi...