首先,bind() 函式是乙個函式函式呼叫bind(這裡簡稱fn)之後,返回給你乙個新的函式, 在bind() 裡面不是直接執行你傳入的這個 fn, 而是在bind() 返回給你的函式裡面執行這個函式,有點繞,給大家用**說下:
function.prototype.
_bind
=function()
;};functiona(
);let newa = a.
bind()
;newa()
;// 這裡裡面執行a 函式
// 這個是簡易的,請大家接著往下看,目的是讓大家理解我上面說的那句話
理解了這個之後,我們就開始寫完整版的bind()
function.prototype.
_bind
=function
(...args)
, bound;
// 返回的函式
bound
=function
(...oargs)
;// 聖杯模式繼承
f.prototype = bindobj;
bound.prototype =
newf()
;return bound;};
// 例子1, 單獨呼叫
function
add(x, y)
;let newadd = add.
bind
(null,1
);let res =
newadd(2
);console.
log(res)
;// 3
// 例子2, new 呼叫
father.prototype.firstname =
'j';
function
father
(lastname)
;let son = father.
bind
(null
,'yaya');
let son =
newson()
;// 是通過 new 呼叫的son, new 的時候,建構函式的 this 是指向它當前的建構函式
console.
log(son.lastname, son.firstname)
;// yaya, j (聖杯模式繼承了)
手寫 call apply 及 bind 函式
function.prototype.mycall function context context context window context.fn this 建立fn屬性,並將值設定為需要呼叫的函式 const args arguments slice 1 因為call可以傳入多個引數作為呼叫...
bind函式 手寫bind this指向問題
要手寫bind,首先要很熟悉bind的工作邏輯和原理 先寫個例子來看一下bind的使用 利用bind改變fn的this指向 執行結果 bind函式會返回乙個新函式,需要fn1來接收一下,bind把函式的this繫結到了newobj物件上 所以寫bind得先看一下內部是怎麼操作的 邏輯 1 bind有...
手寫乙個bind函式(大概)
昨天搜了下bind怎麼實現,大家都在說bind的特徵啊啥的,沒搜到,今天有人問起來,我反問他要咋搜,他和我說柯里化。柯里化!它的最常用的表現形式不就是傳說中的閉包的其中一種嘛!i think i can do it 我覺得我可以嘗試著實現一下。首先我們來回想this指向的幾種可能性 當函式作為乙個物...