2012-05-04 186 views
0

這裏是我的問題的的jsfiddle:http://jsfiddle.net/4wyvv/1/JavaScript對象原型屬性訪問

基本上是:

//constructor function 
function Maker(){ 
    var str; 

    this.init = function(str){ 
     this.str = str; 
    }; 

    this.msg = function(){ 
     return this.str; 
    }; 
} 

//object from Maker 
var obj = new Maker(); 

obj.init("Hi my name is Dan"); 

//make sure everything exists and has worked as expected 
Audit.Log(obj.msg()); 
//look in Maker.prototype for the constructor property 
Audit.Log(obj.constructor); 
//look in Maker.prototype for the constructor property 
Audit.Log(Maker.prototype.constructor); 

//now look for all makers prototype properties, this should list atleast "constructor" 
for(var i in Maker.prototype){ 
    Audit.Log(i); 
} 

爲什麼foreach循環放不出來什麼了嗎?它應該至少拿出構造函數,因爲我顯示Maker.prototype.constructor存在。

回答

2

對象的一些性質,如「構造」被隱藏或更精確地非列出枚舉所以他們不會在這樣的循環中使用列舉了爲,在ECMA5我們有可以得到所有屬性的方法

Object.getOwnPropertyNames(Maker.prototype) 

,這是給你

["constructor"] 

這裏是一個詳細的解釋:How to display all methods of an object in Javascript?

2

MDN

的for..in遍歷對象的枚舉的屬性,在 任意順序。對於每個不同的屬性,可以執行語句 。

比如像constructortoStringhasOwnProperty是非枚舉的屬性,他們不會在的for..in