JavaScript中的所有對象都繼承自Object類。儘管更加具體分類的對象比如Date和RegExp,都定義了它們自己的屬性和方法。但是所有建立的對象也支援Object所定義的屬性和方法,由於這些屬性和方法的通用性,它們也特別有趣。
① constructor屬性
在JavaScript中每個對象都有一個constructor屬性,它引用了初始化這個對象的建構函式。例如:
var d=new Date();d.constructor==Date; //true
既然建構函式定義了新的一種或一類的對象,constructor屬性有助於確定一個對象的類型。例如:
if((typeof o=="object") && (o.constructor==Date))//Then do something with the Date object...
② toString( )方法
toString( )返回一個某種程度上代表著對象的值的一個字串,而它正是在這個對象上調用的。當JavaScript需要把一個對象轉換為一個字串的時候,它就會調用這個方法。遺憾的是預設的toString( )方法並不能提供多少資訊。例如下面的這行代碼只是得到字串"[object Object]":
var s={x:1,y:1}.toString();
由於這個預設的方法並不能顯示太多有用的資訊,很多類都定義了自己的toString( )。例如當一個數群組轉換為字串,會得到數組元素的一個列表,它們中的每一個都轉換為一個字串;而當一個函數轉換為字串的時候,得到的是這個函數的原始碼。
③ toLocaleString( )方法
在ECMAScript v3和JavaScript 1.5中,Object類除了它自己的toString( )方法之外還定義了toLocaleString( )方法。這個方法的作用是返回對象的一個本地化字串表示。Object所定義的預設的toLocaleString( )方法並不會本地化自己,它總是返回和toString( )完全相同的內容。然而子類可以定義它們自己的toLocaleString( )版本。
④ valueOf( )方法
當JavaScript需要把一個對象轉換為某種基礎資料型別 (Elementary Data Type),也就是一個數字而不是一個字串的時候,就調用valueOf( )方法。如果一個對象用在需要一個基本數值的環境中,JavaScript會自動調用這個方法。預設的valueOf( )方法並不做什麼有意義的事情,一些內建的對象就定義了它們自己的valueOf( )方法。在學習完類,建構函式和原型之後,我們就可以自己定義一個定製對象的valueOf( )方法。
⑤ hasOwnProperty( )方法
如果對象用一個單獨的字串參數所指定的名字來本地定義一個非繼承的屬性,hasOwnProperty( )方法就返回true,否則返回false。例如:
var o={};o.hasOwnProperty("undef"); //falseo.hasOwnProperty("toString"); //falseMath.hasOwnProperty("cos"); //true
⑥ propertyIsEnumerable( )方法
如果對象用一個單獨的字串參數所指定的名字來定義一個非繼承的屬性,並且如果這個屬性可以在for/in迴圈中枚舉,propertyIsEnumerable( )方法就返回true,否則返回false。例如:
var o={x:1};o.propertyIsEnumerable("x"); //trueo.propertyIsEnumerable("y"); //falseo.propertyIsEnumerable("valueOf"); //false
注意一個對象的所有的使用者定義屬性都是可以枚舉的。不能枚舉的屬性通常都是繼承的屬性。
⑦ isPrototypeOf( )方法
如果isPrototypeOf( )方法所屬的對象是參數的原型對象,那麼該方法就返回true,否則返回false。
var o={};Object.prototype.isPrototypeOf(o); //trueObject.isPrototypeOf(o); //falseo.isPrototypeOf(Object.prototype); //falseFunction.prototype.isPrototypeOf(Object); //true