js 手寫 bind 函式

2021-09-27 12:05:43 字數 1223 閱讀 3149

首先,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指向的幾種可能性 當函式作為乙個物...