0

这是我的问题的 jsFiddle: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

4

2 回答 2

2

来自MDN

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

constructor, toString,之类的东西hasOwnProperty是不可枚举的属性,它们不会在 for..in 中列出

于 2012-05-04T10:22:05.280 回答
2

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

Object.getOwnPropertyNames(Maker.prototype)

这是给你的

["constructor"]

这里有一个详细的解释:如何在Javascript中显示一个对象的所有方法?

于 2012-05-04T10:22:13.783 回答