溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

關(guān)于JS面向?qū)ο笾性秃驮玩溡约八麄冎g的關(guān)系及this的詳解

發(fā)布時間:2020-05-28 03:10:54 來源:網(wǎng)絡(luò) 閱讀:304 作者:shptc 欄目:網(wǎng)絡(luò)安全

一:原型和原型對象:

1.函數(shù)的原型prototype:函數(shù)才有prototype,prototype是一個對象,指向了當(dāng)前構(gòu)造函數(shù)的引用地址。

2.函數(shù)的原型對象__proto__:所有對象都有__proto__屬性, 當(dāng)用構(gòu)造函數(shù)實例化(new)一個對象時,會將新對象的__proto__屬性指向 構(gòu)造函數(shù)的prototype。

 

1
zhangsan.__proto__==Person.prototype

 

注:在上述代碼中Person是構(gòu)造函數(shù),zhangsan則是該構(gòu)造函數(shù)的一個實例化對象。

以下用一張圖來解釋原型對象和函數(shù)的原型之間的關(guān)系:

關(guān)于JS面向?qū)ο笾性秃驮玩溡约八麄冎g的關(guān)系及this的詳解

由以上圖片可以清楚的看出來函數(shù)原型和原型對象之間的聯(lián)系:

zhangsan是構(gòu)造函數(shù)的一個實例化對象,它的__proto__則是指向它的構(gòu)造函數(shù)prototype,即Person.prototype;

構(gòu)造函數(shù)Person()的__proto__指向函數(shù)總類Function的prototype,而Function()本身也會指向Function的prototype,

Person.prototype和Function.prototype都hi會指向Object總類的prototype,即Object.prototype,Object()的__proto__指向Function.prototype

Object.prototype的__proto__會指向null。

綜上:

①所有函數(shù)的__proto__都是指向Function的prototype。

②構(gòu)造函數(shù)new出來的對象__proto__指向構(gòu)造函數(shù)的prototype。

③非構(gòu)造函數(shù)實例化出的對象或者對象的prototype的__proto__指向Object的prototype。

④Object的prototype指向null。

二:this詳解:

 

1.誰最終調(diào)用函數(shù),this指向誰。
①this指向的永遠(yuǎn)只可能是對象?。。?/span>
②this指向誰永遠(yuǎn)不取決于this寫在哪,而是取決于函數(shù)在哪調(diào)用
③this指向的對象,稱之為函數(shù)的上下文context,也叫函數(shù)的調(diào)用者

2.this指向的規(guī)律(與函數(shù)調(diào)用的方式息息相關(guān)):
this指向的情況,取決于函數(shù)調(diào)用方式有哪些,
①通過函數(shù)名()直接調(diào)用:this指向window
②通過對象.函數(shù)名()調(diào)用的:this指向這個對象
③函數(shù)通過數(shù)組的一個元素,通過數(shù)組下標(biāo)調(diào)用的,this指向這個數(shù)組
④函數(shù)作為window內(nèi)置函數(shù)的回調(diào)函數(shù)調(diào)用時,this指向window如setTimeout setInterval 等
⑤函數(shù)作為構(gòu)造函數(shù)用new關(guān)鍵字調(diào)用時,this指向新new出的對象。

實例:

1
2
3
function func(){
             
        }

①通過函數(shù)名()直接調(diào)用:this指向window。

1
func();

②通過對象.函數(shù)()調(diào)用的:this指向這個對象。

狹義對象:

1
2
3
4
5
var obj={
      name:"obj",
      func1:func
    }
obj.func1()

廣義對象:

1
2
3
document.getElementById("div").onclick=function(){
    this.style.backgroundColor="red";
}

③函數(shù)通過數(shù)組的一個元素,通過數(shù)組下標(biāo)調(diào)用的,this指向這個數(shù)組  。

1
2
var arr=[func,1,2,3];
arr[0]();

④函數(shù)作為window內(nèi)置函數(shù)的回調(diào)函數(shù)調(diào)用時,this指向window。

1
2
setTimeout(func,1000);
setInterval(func,1000);

⑤函數(shù)作為構(gòu)造函數(shù)用new關(guān)鍵字調(diào)用時,this指向新new出的對象。

1
var obj = new func();

以上就是原型鏈和this的 詳解。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI