2011-06-30 9 views
5

オブジェクトのコンストラクタを切り替えようとしていますが、失敗しています。私が必要とするものの例は、継続的なコードで表示されます。ありがとう。JavaScriptのコンストラクタを変更する

<script type="text/javascript"> 

    function Me(){ 

     this.name = "Dejan"; 
    } 

    function You(){ 

     this.name = "Ivan"; 
    } 


    Me.prototype.constructor = You; 
    somebody = new Me(); 


    alert(somebody.name); // **It gives Dejan, and I am expecting Ivan** 

    </script> 

答えて

5

あなたがオブジェクトのコンストラクタを変更することはできません(あなたの例のように)で、あなたはしかし、オブジェクトコンストラクタリターンの「種類」を変更することができます

Me.prototype = new You(); 

これは、新しいMe()がオブジェクトYouから継承する原因になります。

function Me(){ 
    this.name = this.name || "Dejan"; 
} 
function You(){ 
    this.name = this.name || "Ivan"; 
} 
Me.prototype = new You(); 
somebody = new Me(); 
alert(somebody.name); 
+0

ありがとうございます。それは働いている。 –

0

試してみてください。

Me.prototype = new You(); 

Me.prototype.constructor = You; 
    somebody = new Me(); 


    alert(somebody.name); 
+0

いいえ、動作していません。 –

13

Me.prototype.constructorプロパティがMe.prototypeのちょうど公共財産である:ただし)(私にthis.nameに関数は、1つはので、このような何かをあなたから継承されます曇らせます新しいオブジェクトの作成やプロパティ名の解決には使用されません。

唯一のあいまいな関心は、プロトタイプが "所属する"関数を参照し、Meのインスタンスを継承することです。それは新しい値を簡単に割り当てることができる公共のプロパティであるため、それを厳重に管理しない限り、特に信頼できるものではありません。

関連する問題