重看前面的例子: 明明是個函數, 怎麼就成了對象?
function MyObj(a, b) { this.x = a; this.y = b;}var obj = new MyObj(11, 22);alert(obj.x); //11alert(obj.y); //22alert(typeof obj); //object//一個對象的建立要通過建構函式, 有了建構函式就不難成為對象; //用 new 關鍵字調用函數, JavaScript 就會建立一個對象, 並把該函數當作對象的建構函式.//這就像 String 類的建構函式是 String()、Array 類的建立函數是 Array() ...
每個類的建構函式的名稱肯定不一樣, 但可以用 constructor 泛指它們
var str = new String();alert(str.constructor); /* 將會輸出如下:function String() { [native code] } 不過它沒給我們看到具體的實現代碼, 只有自訂的才會看到 */var arr = new Array();alert(arr.constructor); /* 將會輸出如下:function Array() { [native code] } */function MyObj(a, b) { this.x = a; this.y = b;}var obj = new MyObj(11, 22);alert(obj.constructor); /* 將會輸出如下:function MyObj(a, b) { this.x = a; this.y = b;}*/
判斷一個對象所屬的類(方法一)
//通過上面手段, 可以判斷一個對象到底是屬於哪一個類var str, arr, s;str = new String();alert(str.constructor == String); //truearr = new Array();alert(arr.constructor == Array); //true/* 但這會有個問題, 譬如一個不是對象的字串也會返回 true */s = 'ABC';alert(s.constructor == String); //true//解決這個問題當然可以再加條件, 但不如直接用下一個方法
判斷一個對象所屬的類(方法二: 使用 instanceof 關鍵字)
var str, arr, str;str = new String();alert(str instanceof String); //truearr = new Array();alert(arr instanceof Array); //truestr = 'ABC';alert(str instanceof String); //false/* 但這也會有個問題, 因為 Object 是所有類的祖先 ... */str = new String();alert(str instanceof Object); //true