国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript中的原型鏈prototype介紹

2019-11-20 13:33:23
字體:
來源:轉載
供稿:網友

JavaScript中的繼承是通過原型鏈(prototype chain)來完成的:每個對象內部都有另外一個對象作為其prototype而存在,對象從這個prototype中繼承屬性(property)。對于每個對象來說,可以用以下三種方式來訪問其原型對象:

1.__proto__。可以通過對象的__proto__屬性來訪問其原型對象。該屬性僅在Firefox、Safari和Chrome中得到支持,在IE和Opera中不支持。

2.Object.getPrototypeOf()。可以將對象作為參數傳入Object.getPrototypeOf()方法,執行后即返回對象的原型對象。此方法僅在ECMAScript 5標準中得到支持。

3.o.constructor.prototype。通過先獲取對象的constructor函數,然后再通過訪問constructor函數的prototype屬性來訪問到原型對象。使用此方法的前提為:對象中存在指向構造函數的constructor屬性。

判斷兩個對象間是否存在原型鏈關系可以使用isPrototype()方法:


復制代碼 代碼如下:

var p = {x:1};
var o = Object.create(p);
console.log(p.isPrototypeOf(o));//true


對于所有用字面量創建的對象而言,其prototype對象均為Object.prototype(作為一個特殊對象,Object.prototype沒有原型對象):


復制代碼 代碼如下:

var x = {a:18, b:28};
console.log(x.__proto__);//Object {}


而對于所有用new操作符創建的對象而言,其prototype對象均為constructor函數的prototype屬性:


復制代碼 代碼如下:

var x = {a:18, b:28};
function Test(c){
  this.c = c;
}
Test.prototype = x;
var t = new Test(38);
console.log(t);//Object {c=38, a=18, b=28}
console.log(t.__proto__);//Object {a=18, b=28}
console.log(t.__proto__.__proto__);//Object {}


JavaScript中使用new操作符創建對象的過程如下:

1.創建一個新的空對象。
2.將這個對象的__proto__屬性指向constructor函數的prototype屬性。
3.將這個對象作為this參數,執行constructor函數。

從上述創建過程可以得出結論:所有從同一個constructor函數中構造出來的對象,其__proto__屬性(也即其原型對象)相等,也就是說,只存在一個原型對象:


復制代碼 代碼如下:

var t = new Test(38);
var t2 = new Test(68);
console.log(t === t2);//false
console.log(t.__proto__ === t2.__proto__);//true

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹤岗市| 拉孜县| 同仁县| 廊坊市| 二手房| 舞阳县| 姜堰市| 恩施市| 阿拉善右旗| 阳高县| 泰来县| 建宁县| 九江县| 忻城县| 永善县| 湖州市| 拜泉县| 连州市| 永泰县| 塔城市| 普洱| 兴国县| 西峡县| 普兰县| 崇阳县| 博客| 定边县| 岱山县| 青岛市| 平乐县| 正镶白旗| 南部县| 随州市| 崇礼县| 乐都县| 湖北省| 夏河县| 定兴县| 老河口市| 雷波县| 泉州市|