每一個(gè)javaScript對(duì)象(null除外)都和另一個(gè)對(duì)象相關(guān)聯(lián)。“另一個(gè)對(duì)象”就是我們熟知的原型,每一個(gè)對(duì)象都從原型繼承屬性。

在ECMAScript5中,將對(duì)象作為參數(shù)傳入Object.getPRototypeOf()中可以查詢(xún)它的原型。
要檢測(cè)一個(gè)對(duì)象是不是另一個(gè)對(duì)象的原型,可以通過(guò)isPrototypeOf()方法。例如可以通過(guò)p.isPrototypeOf(o)檢測(cè)p是否是o的原型。
每一個(gè)函數(shù)都包含一個(gè)prototype屬性,指向函數(shù)的原型對(duì)象。當(dāng)將函數(shù)用作構(gòu)造函數(shù)的時(shí)候,新創(chuàng)建的對(duì)象會(huì)從原型對(duì)象上繼承屬性。例如:
//這是一個(gè)構(gòu)造函數(shù),用以初始化新創(chuàng)建的“范圍對(duì)象”function Range(from, to){ this.from = from; this.to = to;}//所有的“范圍對(duì)象”都繼承自這個(gè)對(duì)象//注意屬性的名字是prototypeRange.prototype = { //如果x在范圍內(nèi),則返回true;否則返回false includes: function(x){ return this.from <= x && x <= this.to; }, //對(duì)于范圍內(nèi)的每一個(gè)整數(shù)都調(diào)用一次f foreach: function(f){ for(var x = Math.ceil(this.from); x <= this.to; x++) f(x); }, //表示返回這個(gè)范圍的字符串 toString: function(){ return "(" + this.from + "..." + this.to + ")"; }};var r = new Range(1, 3); //創(chuàng)建一個(gè)范圍對(duì)象r.includes(2); //truer.foreach(console.log); //輸出 1 2 3console.log(r.toString()); //輸出 (1...3)原型對(duì)象是類(lèi)的唯一標(biāo)識(shí):當(dāng)且僅當(dāng)兩個(gè)對(duì)象繼承自同一個(gè)原型對(duì)象時(shí),它們才是屬于同一個(gè)類(lèi)的實(shí)例。而初始化對(duì)象的狀態(tài)的構(gòu)造函數(shù)則不能作為類(lèi)的標(biāo)識(shí)。兩個(gè)構(gòu)造函數(shù)的prototype屬性可能指向同一個(gè)原型對(duì)象,那么這兩個(gè)構(gòu)造函數(shù)創(chuàng)建的實(shí)例是屬于同一個(gè)類(lèi)的。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注