javascript对象原型属性访问

时间:2012-05-04 09:48:57

标签: javascript prototype

这是我的问题的一个小问题:http://jsfiddle.net/4wyvv/1/

基本上:

//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 个答案:

答案 0 :(得分:2)

来自MDN

  

for..in 迭代对象的可枚举属性   任意顺序。对于每个不同的属性,语句都可以   执行。

constructortoStringhasOwnProperty等内容属于不可枚举的属性,并且不会列在for..in

答案 1 :(得分:2)

像“构造函数”这样的对象的某些属性是隐藏的,或者更精确地是不可枚举的,因此它们不会像这样使用for循环枚举,在ECMA5中我们有一个可以获取所有属性的方法

Object.getOwnPropertyNames(Maker.prototype)

这是给你的

["constructor"]

以下是详细说明:How to display all methods of an object in Javascript?