1

Haloの皆さん..私はこのサイトではまったく新しいので、助けていただければ幸いです。私の質問が別のトピックにすでに存在する場合はお知らせください。次の問題があります。別のオブジェクトを持つオブジェクトを作成します。子オブジェクトにはいくつかのプロパティがあります。子オブジェクトを繰り返してプロパティを取得するときはいつでも、すべてのプロパティが文字列タイプであるように見えます。以下は私のコードです。

    var obj = {}
    obj.x = function(){
        this.y = function(){

        }
    }

    for(var a in obj){
        alert(typeof(a) === "string"); //this will be true
        alert(a.hasOwnProperty("y")); //this will be false
    }

私はこれをテストするためにクロムを使用します。typeof(a)=== "function"が真であり、a.hasOwnProperty( "y")も真である必要がありますか?私はここで私の間違いを見ることができません。私はかなり迷っています..何かアイデアはありますか?

4

2 に答える 2

0

obj.x関数をオブジェクトのコンストラクターとして使用する場合は、関数です。

obj.x = new (function(){
    this.y = function(){

    }
})(); 

また、あなたのテストは間違っています、aただの文字列なので、もちろんそれはyプロパティを持っていません。

for(var a in obj){
    alert(typeof(obj[a]) === "object");  
    alert(obj[a].hasOwnProperty("y"));  
}
于 2013-03-24T19:20:58.327 に答える
0
for(var a in obj){
        alert(typeof(a) === "string"); //this will be true
}

JavaScriptのFor...inループは、プロパティ自体ではなく、オブジェクトのプロパティ名を繰り返し処理します。したがってa、常に文字列になる各プロパティの名前が返されます

この例では、objに1つのプロパティxがあるため、ループは次のように1回実行さaれます。"x"

オブジェクトのプロパティを反復処理する場合は、これを行うことができます

for(var a in obj){
    var property = obj[a];
        alert(typeof( property) === "string"); //this will be false
}
于 2013-03-24T19:28:24.313 に答える