如何理解和熟練運用js中的call及apply?

2021-09-08 13:57:53 字數 1046 閱讀 5326

obj.call(thisobj, arg1, arg2, ...);
兩者作用一致,都是把obj(即this)繫結到thisobj,這時候thisobj具備了obj的屬性和方法。或者說thisobj『繼承』了obj的屬性和方法。繫結後會立即執行函式。

function add(j, k)

function sub(j, k)

我們在控制台執行:

add(5,3); //8

add.call(sub, 5, 3); //8

sub(5, 3); //2

sub.call(add, 5, 3); //2

示例:

var a = ; 

a.slice(); //typeerror: a.slice is not a function

array.prototype.slice.call(a);//[1, "yjc"]

物件a類似array,但不具備array的slice等方法。使用call繫結,這時候就可以呼叫slice方法。

var parent = function()

var child = {};

console.log(child);//object {} ,空物件

parent.call(child);

console.log(child); //object

以上實現了物件的繼承。

obj.bind(thisobj, arg1, arg2, ...);
同樣是add()和sub():

add.bind(sub, 5, 3); //不再返回8

add.bind(sub, 5, 3)(); //8

如果bind的第乙個引數是null或者undefined,等於將this繫結到全域性物件。

如何理解和熟練運用js中的call及apply?

function cat cat.prototype var blackcat new cat blackcat.say 用的比較多的,通過document.getelementsbytagname選擇的dom 節點是一種類似array的array。它不能應用array下的push,pop等方法。我...

如何理解和熟練運用js中的call及apply?

obj.call thisobj,arg1,arg2,兩者作用一致,都是把obj 即this 繫結到thisobj,這時候thisobj具備了obj的屬性和方法。或者說thisobj 繼承 了obj的屬性和方法。繫結後會立即執行函式。function add j,k function sub j,k...

如何理解和熟練運用js中的call及apply

function cat cat.prototype var blackcat new cat blackcat.say 用的比較多的,通過document.getelementsbytagname選擇的dom 節點是一種類似array的array。它不能應用array下的push,pop等方法。我...