JavaScript 檢測原型對象
■知識點(diǎn)
在JavaScript中,F(xiàn)unction對象預(yù)定義了 prototype屬性,該屬性指向一個(gè)原型對象。當(dāng)定義構(gòu)造函數(shù)時(shí),系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)對象,并傳遞給prototype屬性,這個(gè)對象被稱為原型對象。原型對象可以存儲(chǔ)構(gòu)造類型的原型屬性,以便讓所有實(shí)例對象共享。
■實(shí)例設(shè)計(jì)
下面的代碼為自定義類型函數(shù)定義兩個(gè)原型成員。
var f = function (){}
f.prototype = {
a : 1,
b : function (){
return 2;
}
}
console.log (f.prototype, a) ; //讀取函數(shù)的原型對象的屬性a,返回1
console.log (f. prototype.b() ) ; //讀取函數(shù)的原型對象的屬性b,返回2
當(dāng)使用new運(yùn)算符調(diào)用函數(shù)時(shí),就會(huì)創(chuàng)建一個(gè)實(shí)例對象,這個(gè)實(shí)例對象將繼承構(gòu)造函數(shù)的原型對象中所有屬性。
var o = new f (); //實(shí)例對象
console.log (o.a); //訪問原型對象的屬性
console.log (o.b ()); //訪問原型對象的厲性
為了方便判定,Object對象定義了 isPrototypeOf()方法,該方法可以檢測一個(gè)對象的原型對象。針對上面的示例,可以判斷f.prototype就是對象o的原型對象,因?yàn)槠浞祷刂禐閠rue。
var b = f.prototype.isPrototypeOf(o);
console.log(b);
■小結(jié)
下面的示例演示了各種特殊對象的原型對象。
函數(shù)的原型對象可以是Object.prototype或者是Function.prototype:
var f = function (){}
console.log(Object.prototype.isPrototypeOf(f)); //返回 true
console.log(Function .prototype.isPrototypeOf(f)); //返回 true
Object和Function對象的原型對象比較特殊:
console.log(Function .prototype.isPrototypeOf(Object)); //返回 true
console.log(Object.prototype.isPrototypeOf(Function)); //返回 true
Object.prototype 和 Function.prototype 的原型對象不是Object.prototype,而 Function.prototype 的原型對象可以是Function.prototype,但是Object.prototype的原型對象絕對不是Function .prototype:
console.log (Object.prototype.isPrototypeOf (Object.prototype)); //返回 false
console.log (Object.prototype.isPrototypeOf (Function .prototype)); //返回 true
console.log (Function.prototype.isPrototypeOf (Function.prototype)); //返回 false
console.log (Function.prototype.isPrototypeOf (Object.prototype)); //返回 false
點(diǎn)擊加載更多評論>>