这是我的问题的一个小问题: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
。
答案 0 :(得分:2)
来自MDN
for..in 迭代对象的可枚举属性 任意顺序。对于每个不同的属性,语句都可以 执行。
constructor
,toString
,hasOwnProperty
等内容属于不可枚举的属性,并且不会列在for..in
答案 1 :(得分:2)
像“构造函数”这样的对象的某些属性是隐藏的,或者更精确地是不可枚举的,因此它们不会像这样使用for循环枚举,在ECMA5中我们有一个可以获取所有属性的方法
Object.getOwnPropertyNames(Maker.prototype)
这是给你的
["constructor"]
以下是详细说明:How to display all methods of an object in Javascript?