手寫bind原始碼

2022-07-26 21:00:16 字數 1740 閱讀 1520

三個方法的相同點:

目標函式被呼叫時,改變this的指向的值

三個方法都是函式的方法,掛在在function.prototype上

不同點:

目標函式呼叫bind後,不會立即執行,而是返回乙個新的函式,呼叫新函式才會執行目標函式

//

自定義乙個類似於bind函式的函式,將其掛載到函式function上面,然後就可以用函式來呼叫該自定義的函式了

//給函式擴充套件乙個方法

function.prototype.customebind =function (thisarg,...list)

}function func(...arg)

func.prototype.miaov =function ()

let newfunc = func.bind(,1,2,3,4

);

//自定義bind函式

let newfunc2 = func.customebind(,1,2,3,4

) newfunc(

5,6,7,8

) newfunc2(

5,6,7,8);

1.目標函式呼叫後返回新函式

2.呼叫新函式,也就是呼叫目標函式this為傳入bind的第乙個引數

3.把新函式當作建構函式,是可以找到目標函式的原型,所以新函式繼承目標函式的原型

4.新函式當作建構函式後,目標函式this指向為原型物件

//

注意/*

目標函式:呼叫bind的函式,func.bind func就稱之為是目標函式

新函式:bind返回的函式,

*//*1.返回的函式作為建構函式,新函式要繼承目標函式的原型

2.一旦把新函式當成建構函式了,目標函式的this應該指向例項物件

*///建構函式的問題

function.prototype.customebind =function (thisarg,...list)

//原型繼承

= self.prototype;

用來建立以某乙個物件作為原型的物件的

bound.prototype = object.create(self.prototype)//

建立乙個新的物件,該新物件是以self.prototype作為原型建立出來的

bound.prototype.constructor =self

//返回乙個新函式

return

bound

}function func(...arg)

func.prototype.miaov =function ()

let newfunc = func.bind(,1,2,3,4

);

//自定義bind函式

let newfunc2 = func.customebind(,1,2,3,4

)

//建構函式

let f1 =new newfunc(5,6,7,8

) console.log(f1.miaov)

let f2 =new newfunc2(5,6,7,8

); console.log(f2.miaov)

//undefined,因為f2是newfunc2的乙個返回值建立出來的,這個返回值就是customebind函式裡面的匿名韓式建立出來的,而這個匿名函式於customebind沒有關聯

bind原始碼重寫

前言 在了解怎麼實現bind之前我們先來了解一下bind的功能,正所謂知己知彼百戰不殆。原生bind的功能 bind的功能主要用來強制繫結函式的this,然後返回乙個新的函式 function show args var obj var newshow0 show.bind var newshow1...

手寫Vuex原始碼

vuex是基於vue的響應式原理基礎,所以無法拿出來單獨使用,必須在vue的基礎之上使用。main.js 1 import store form store 引入乙個store檔案2 3new vue store.js 1 import vuex from vuex 2 3vue.use vuex ...

Vue 原始碼閱讀(七) bind

class demo resize init new demo 執行後,縮放瀏覽器,此時彈窗顯示undefined。符合預期!import vue from vue new vue methods mounted 縮放瀏覽器,此時彈框顯示1。不符合預期!按常理,繫結事件this.resize後,將會...