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 に答える