constructor
var x = 3;
x.constructor; // function Number () { } , 是一個(gè)函數(shù)
typeof (x.constructor); // function
x.constructor == Number; // true
為什么x會(huì)有constructor屬性。因?yàn)槊恳粋€(gè)構(gòu)造函數(shù)原型都會(huì)生成constructor屬性咧栗,且這個(gè)屬性指向構(gòu)造函數(shù)。而實(shí)例對(duì)象是繼承了原型的屬性和方法的
用法:判斷給定對(duì)象為什么類
function type(x) {
if (x == null) return ""; //Null 和 undefined 沒(méi)有構(gòu)造函數(shù)
switch (x.constructor) {
case Number: return "Number"; //處理原始類型
case String: return "String"; //處理原始類型
case Date: return "Date"; //處理內(nèi)置類型
case Complex: return "Complex"; //處理自定義類型
}
}
- 不足
1.頁(yè)面多個(gè)框架頁(yè)面中,創(chuàng)建的兩個(gè)數(shù)組繼承自兩個(gè)完全相同卻相互獨(dú)立的原型對(duì)象居凶,因而其中一個(gè)框架頁(yè)面中的數(shù)組對(duì)象不是另外一個(gè)框架頁(yè)面中Array()構(gòu)造函數(shù)的實(shí)例。(instanceof也如此)
2.此外藤抡,不是每個(gè)實(shí)例都有constructor屬性侠碧,該屬性是繼承自原型對(duì)象,原型對(duì)象可能沒(méi)有該屬性缠黍∨担或者,實(shí)例原型更改后并沒(méi)有指向正確的構(gòu)造函數(shù)瓷式,導(dǎo)致不正確替饿。