call apply bind的使用和實現

2021-09-24 08:25:44 字數 1768 閱讀 1898

作用:

修改函式this為目標物件

說明:

與bind的區別:bind是返回別修改過this的函式,而call是修改this,並直接呼叫

code:

var name = 'window';

var obj = ;

function

showname(age, gender)

// 直接呼叫(this => window)

showname(18, 'man'); // 執行結果:輸出window 18 man

// call呼叫(this => obj)

showname.call(obj, 18, 'man');// 執行結果:輸出obj 18 man

複製**

作用:

修改函式this為目標物件

說明:

與bind的區別:bind是返回別修改過this的函式,而call是修改this,並直接呼叫

code:

var name = 'window';

var obj = ;

function

showname(age, gender)

// 直接呼叫(this => window)

showname(18, 'man'); // 執行結果:輸出window 18 man

複製**

作用:

修改函式this為目標物件

說明:

new修改過this的建構函式,裡面的this指向new出來的例項物件

code:

var name = 'window';

var obj = ;

function

showname(age, gender)

// 直接呼叫(this => window)

showname(18, 'man'); // 執行結果:輸出window 18 man

// bind呼叫(this => obj)

var newshowname = showname.bind(obj, 18, 'man');

newshowname(); // 執行結果:輸出obj 18 man

複製**

call:
function.prototype.mycall = function () 

var result = eval('zl.fn(' + args + ')');

delete zl.fn;

return result;

};複製**

var zl = zl == null ? window : zl;

var result;

zl.fn = this;

if (!arr) else

result = eval('zl.fn(' + args + ')');

}delete zl.fn;

return result;

};複製**

bind:

function.prototype.mybind = function () ;

var fn = function () ;

temp.prototype = self.prototype;

fn.prototype = new temp();

return fn;

};複製**

聊聊call apply bind的故事

實際上它們真正的樣子是這樣的 它們幾個的作用都是改變this的指向。bind 與另外兩個的區別則是前者改變this,不立即呼叫函式 而後者改變this,立即呼叫函式。以下例子在非嚴格模式下,注釋的是各個情況this的指向 let test test.foo test.foo.call null,1,...

寫給新人的call apply bind

語法 1 fun.call thisarg arg1 arg2 thisarg fun函式執行時指定的this值,可能的值為 例如 123 456functiona functionb a.call b functionb 經常會看到這種使用情況 123 45function list list 1...

理解 call, apply, bind 的用法

call 方法使用乙個指定的this值和單獨給出的乙個或多個引數來呼叫乙個函式。function list list 1,2,3,4,5 1 陣列的所有方法都是掛在array的prototype上的,如圖 而類陣列物件本身是沒有這些方法的,當然也無法呼叫 那麼想在一些物件上呼叫這個物件本身沒有的方法...