每一個javaScript對象(null除外)都和另一個對象相關聯?!傲硪粋€對象”就是我們熟知的原型,每一個對象都從原型繼承屬性。
在ECMAScript5中,將對象作為參數傳入Object.getPRototypeOf()中可以查詢它的原型。
要檢測一個對象是不是另一個對象的原型,可以通過isPrototypeOf()方法。例如可以通過p.isPrototypeOf(o)檢測p是否是o的原型。
每一個函數都包含一個prototype屬性,指向函數的原型對象。當將函數用作構造函數的時候,新創建的對象會從原型對象上繼承屬性。例如:
//這是一個構造函數,用以初始化新創建的“范圍對象”function Range(from, to){ this.from = from; this.to = to;}//所有的“范圍對象”都繼承自這個對象//注意屬性的名字是prototypeRange.prototype = { //如果x在范圍內,則返回true;否則返回false includes: function(x){ return this.from <= x && x <= this.to; }, //對于范圍內的每一個整數都調用一次f foreach: function(f){ for(var x = Math.ceil(this.from); x <= this.to; x++) f(x); }, //表示返回這個范圍的字符串 toString: function(){ return "(" + this.from + "..." + this.to + ")"; }};var r = new Range(1, 3); //創建一個范圍對象r.includes(2); //truer.foreach(console.log); //輸出 1 2 3console.log(r.toString()); //輸出 (1...3)原型對象是類的唯一標識:當且僅當兩個對象繼承自同一個原型對象時,它們才是屬于同一個類的實例。而初始化對象的狀態的構造函數則不能作為類的標識。兩個構造函數的prototype屬性可能指向同一個原型對象,那么這兩個構造函數創建的實例是屬于同一個類的。
新聞熱點
疑難解答