色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javascript bind 原理

JavaScript主要是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,對(duì)象是JavaScript的核心,函數(shù)是一種特殊的對(duì)象。其中,函數(shù)作為對(duì)象,具有調(diào)用和被調(diào)用兩種行為。其中被調(diào)用的方式有很多種,比如直接調(diào)用、apply調(diào)用、call調(diào)用,以及bind綁定等,本文主要介紹bind綁定的原理。

舉個(gè)例子,我們現(xiàn)在有一個(gè)對(duì)象person,以及一個(gè)sayHello方法,我們可以使用如下語(yǔ)句進(jìn)行調(diào)用:

var person = {
name: "lucy",
sayHello: function () {
console.log('Hello, ' + this.name + '!');
}
};
person.sayHello(); // Hello, lucy!

那么現(xiàn)在我們來(lái)調(diào)用sayHello方法,但是要改變其中this的指向,讓其指向某一個(gè)不同的對(duì)象。這個(gè)時(shí)候,我們可以使用bind方法實(shí)現(xiàn):

var anotherPerson = {
name: "bob"
};
var sayHelloToBob = person.sayHello.bind(anotherPerson);
sayHelloToBob(); // Hello, bob!

在上述代碼中,我們使用bind方法將person對(duì)象的sayHello方法綁定到了anotherPerson對(duì)象上,這樣我們調(diào)用sayHelloToBob方法時(shí),實(shí)際上this指向了anotherPerson對(duì)象。

那么,bind綁定的原理是什么呢?每個(gè)函數(shù)都有一個(gè)call方法和一個(gè)apply方法,它們都可以用來(lái)改變函數(shù)中this的指向。但是,call方法和apply方法不會(huì)改變?cè)瘮?shù),而是生成了一個(gè)新的函數(shù)并立即調(diào)用,而bind方法則會(huì)返回一個(gè)新的函數(shù),必須手動(dòng)調(diào)用才能執(zhí)行。

看下面的例子:

var name = "global name";
function sayName() {
console.log(this.name);
}
var obj = {
name: "obj name"
};
sayName.call(obj); // obj name
sayName.apply(obj); // obj name
var objSayName = sayName.bind(obj);
objSayName(); // obj name

在上述代碼中,我們定義了一個(gè)函數(shù)sayName,并同時(shí)定義了一個(gè)變量name。接著我們使用call方法和apply方法,來(lái)改變sayName函數(shù)中this的指向,從而輸出了obj對(duì)象中的name屬性。

最后,我們使用bind方法將sayName函數(shù)綁定到obj對(duì)象上,并將其賦值給了objSayName變量。當(dāng)我們調(diào)用objSayName時(shí),sayName函數(shù)內(nèi)部的實(shí)際this仍然指向obj對(duì)象,從而輸出了obj對(duì)象中的name屬性。

綜上所述,bind方法的主要原理就是在調(diào)用時(shí)會(huì)返回一個(gè)新的函數(shù),并將原函數(shù)中的this指向修改成綁定對(duì)象。由于返回的是函數(shù)而不是立即執(zhí)行,我們可以隨時(shí)調(diào)用新函數(shù),以達(dá)到需要的效果。