constructor
var x = 3;
x.constructor; // function Number () { } , 是一個函數(shù)
typeof (x.constructor); // function
x.constructor == Number; // true
為什么x會有constructor屬性。因為每一個構造函數(shù)原型都會生成constructor屬性,且這個屬性指向構造函數(shù)。而實例對象是繼承了原型的屬性和方法的
用法:判斷給定對象為什么類
function type(x) {
if (x == null) return ""; //Null 和 undefined 沒有構造函數(shù)
switch (x.constructor) {
case Number: return "Number"; //處理原始類型
case String: return "String"; //處理原始類型
case Date: return "Date"; //處理內(nèi)置類型
case Complex: return "Complex"; //處理自定義類型
}
}
- 不足
1.頁面多個框架頁面中,創(chuàng)建的兩個數(shù)組繼承自兩個完全相同卻相互獨立的原型對象,因而其中一個框架頁面中的數(shù)組對象不是另外一個框架頁面中Array()構造函數(shù)的實例。(instanceof也如此)
2.此外,不是每個實例都有constructor屬性,該屬性是繼承自原型對象,原型對象可能沒有該屬性。或者,實例原型更改后并沒有指向正確的構造函數(shù),導致不正確。