call, apply, bind方法詳解

2021-09-02 23:54:39 字數 2065 閱讀 5253

function a(x, y)

var c = {};

a.call(c,5,6); //5 6 {} arguments = [5,6]

再看例子

function person(age, male)

var person1 = {};

person.call(person1,20, "female"); //person1 =

var person = 

};var person1 = ;

person.sayage.call(person1); //my age is30 my male is male

var person = ;

var age = 30;

function sayage (male)

sayage("male"); //30 male 函式中的this指向window

var foo = sayage.bind(person,"female"); //20 female

sayage.call(person,"female"); //20 female

foo(); //20 female

bind()方法的實現:

bind()方法有兩條準則:

1.會返回乙個函式

2.可以傳參,既可以給bind()函式傳參,又可以給返回函式傳參。

首先滿足第乙個條件

function.prototype.mybind = function(contex)

}

然後滿足引數條件

function.prototype.mybind = function(contex);

};

另外,返回函式還可以當建構函式使用,因此,還需要加入當建構函式使用時的程式:

function.prototype.mybind = function(contex);

fbound.prototype = this.prototype; //修改返回函式的prototype為繫結函式的prototype,例項就可以繼承函式原型中的值,至此就形成了繼承的關係。所以,當作為建構函式使用時,this指向例項,self指向繫結函式,結果返回true;相反,如果沒有new的話,表示返回函式只是普通函式呼叫,這時,this指向window,self指向繫結函式,所以,返回false.

return fbound;

};

用call()方法實現bind();

function.prototype.mybind = function(contex);

fbound.prototype = this.prototype;

return fbound;

};

call()方法的實現:

基本實現過程分為三步:

為物件新增方法。

方法執行。

刪除方法。

程式:

function.prototype.mycall = function(context);
還可以用es6的方法:

function.prototype.mycall = function(context);

person.mycall(bar,"wang",18);

context.fn = this; //這個this指向呼叫的函式,為物件新增乙個函式

//為這個函式傳參

var args = ;

for (var i = 0; i < arguments[1].length; i++)

context.fn( ...args );

delete context.fn;

};

call apply bind方法詳解

var name window var newthis function showname info1,info2 showname a b 輸出 window a b 通過bind改變this指向 var newshowname showname.bind newthis,hello world ...

call apply bind 方法用法測試

call 1 use strict function test xx,yy let a 呼叫test方法,將 a 放到方法裡當作 this。所以裡列印a才會有值的。test.call a,10,20 console.log a 3 use strict function test xx,yy let...

call apply bind方法及其應用

1 call 方法可以呼叫乙個函式 functionfn fn.call window2 call 方法可以改變函式的this指向 var o function fn x,y 利用call方法後this指向了o這個物件 fn.call o,1,2 call方法總結 var o function fn...