2012-03-03 8 views
1

コードスニペットは次のとおりです。なぜ誰もがa.hasOwnProperty("prototype")が真である理由を説明できますか?関数には独自のプロトタイプがあり、他はObjectから継承されているのでしょうか?その場合、なぜc.hasOwnProperty("prototype")はfalseですか?また、そのconstructorのプロパティはどこから来たのですか?ありがとうJSのプロトタイプとコンストラクタプロパティ

var a = function() { 
    }; 
    var b = new String("test"); 
    var c = {}; 

    console.log(a.hasOwnProperty("prototype"));//true 
    console.log(b.hasOwnProperty("prototype"));//false 
    console.log(c.hasOwnProperty("prototype"));//false 
    console.log(a.hasOwnProperty("constructor"));//false 
    console.log(b.hasOwnProperty("constructor"));//false 
    console.log(c.hasOwnProperty("constructor"));//false 
    console.log(a.constructor);//Function() 
    console.log(b.constructor);//String() 
    console.log(c.constructor);//Object() 

答えて

3

prototypeプロパティは、コンストラクタ関数でのみ使用できます。 'a'は関数なのでプロトタイプがあります。 'b'と 'c'はインスタンスです。彼らはプロトタイプを持っていません、彼らのコンストラクタはプロトタイプを持っています:

console.log(a.constructor.hasOwnProperty("prototype")) // true 
console.log(b.constructor.hasOwnProperty("prototype")) // true 
console.log(c.constructor.hasOwnProperty("prototype")) // true 
+0

ありがとう。 btw、a.hasOwnProperty( "constructor")はfalseを返します。コンストラクタのプロパティがObjectから継承されていることを意味しますか? – jason

+0

はい、チェックします:Object.prototype.hasOwnProperty( "constructor") –

関連する問題