日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
前端百題斬——原型、構(gòu)造函數(shù)和實(shí)例之間的奇妙關(guān)系

16.1 基礎(chǔ)

原型

每個(gè)對(duì)象都包含一個(gè)原型屬性(prototype),用于關(guān)聯(lián)另一個(gè)對(duì)象,關(guān)聯(lián)后就能使用那個(gè)對(duì)象的屬性和方法,這其實(shí)就是JavaScript的原型式繼承。操作原型有如下方法:

(1)Object.create()

根據(jù)指定的原型創(chuàng)建新對(duì)象,原型可以是null

 
 
 
 
  1. const parentObj = { 
  2.     add: function() { 
  3.         return this.a + this.b; 
  4.     } 
  5. }; 
  6.  
  7. const newObj = Object.create(parentObj, { 
  8.     a: { 
  9.         value: 10 
  10.     }, 
  11.     b: { 
  12.         value: 20 
  13.     } 
  14. }); 
  15.  
  16. console.log(newObj.add()); // 30 

(2)Object.getPrototypeOf()

返回指定對(duì)象的原型

 
 
 
 
  1. console.log(Object.getPrototypeOf(newObj)); // { add: [Function: add] } 

(3)Object.setPrototypeOf()

設(shè)置一個(gè)指定的對(duì)象的原型到另一個(gè)對(duì)象或 null。

 
 
 
 
  1. const parentObj = { 
  2.     add: function() { 
  3.         return this.a + this.b; 
  4.     } 
  5. }; 
  6.  
  7. const childObj = { 
  8.     a: 10, 
  9.     b: 20 
  10. }; 
  11.  
  12. Object.setPrototypeOf(childObj, parentObj); 
  13.  
  14. console.log(childObj.add()); // 30 
  15. console.log(Object.getPrototypeOf(childObj)); // { add: [Function: add] } 

(4)Object.prototype.isPrototypeOf()

返回一個(gè)布爾值,用于檢查一個(gè)對(duì)象是否存在于另一個(gè)對(duì)象的原型鏈上。

 
 
 
 
  1. console.log(parentObj.isPrototypeOf(childObj)); // true 

構(gòu)造函數(shù)

構(gòu)造函數(shù) ,是一種特殊的方法。主要用來(lái)在創(chuàng)建對(duì)象時(shí)初始化對(duì)象, 即為對(duì)象成員變量賦初始值,總與new運(yùn)算符一起使用在創(chuàng)建對(duì)象的語(yǔ)句中。

實(shí)例

通過構(gòu)造函數(shù)和new創(chuàng)建出來(lái)的對(duì)象,就是實(shí)例

16.2 三者之間關(guān)系

下面先看一張網(wǎng)上流傳的神圖,里面包含了原型、構(gòu)造函數(shù)、實(shí)例三者之間的關(guān)系。

image-20210530114840237.png

上述圖中內(nèi)容可以簡(jiǎn)化為以下幾條:

  • 原型.constructor === 構(gòu)造函數(shù)
  • 構(gòu)造函數(shù).prototype === 原型
  • 實(shí)例.__ proto __ === 原型

下面先來(lái)看一段代碼,這段代碼雖然簡(jiǎn)短,但是里面卻包含了上述的原型、構(gòu)造函數(shù)和實(shí)例。

 
 
 
 
  1. // 構(gòu)造函數(shù) 
  2. function Test(a, b) { 
  3.     this.a = a; 
  4.     this.b = b; 
  5.  
  6. // 原型 
  7. Test.prototype.add = function() { 
  8.     return this.a + this.b; 
  9.  
  10. // 實(shí)例 
  11. const test = new Test(10, 20); 
  12. console.log(test.add()); // 30 

下面來(lái)利用上述代碼驗(yàn)證一下這三者的關(guān)系

獲取實(shí)例內(nèi)容

在實(shí)例中具備__ proto __ 屬性,可以看到里面的內(nèi)容就是原型,從而驗(yàn)證了實(shí)例.__ proto __ === 原型

獲取構(gòu)造函數(shù)內(nèi)容

獲取原型內(nèi)容

在原型中具備constructor屬性,該屬性的內(nèi)容就是構(gòu)造函數(shù),從而驗(yàn)證了原型.constructor === 構(gòu)造函數(shù)

本文轉(zhuǎn)載自微信公眾號(hào)「執(zhí)鳶者」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系執(zhí)鳶者公眾號(hào)。


新聞名稱:前端百題斬——原型、構(gòu)造函數(shù)和實(shí)例之間的奇妙關(guān)系
文章路徑:http://www.5511xx.com/article/dhossge.html