三個方法的相同點:
目標函式被呼叫時,改變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後,將會...