2011-06-30 21 views
5

Próbuję od czasu do czasu zmienić konstruktor obiektu i nie działa. Ciąg dalszy kodu pokaże przykład tego, czego potrzebuję. Dzięki.Zmiana konstruktora w kodzie 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> 

Odpowiedz

5

Nie można zmienić konstruktorów obiektu, można jednak zmienić „typ” obiektu powraca konstruktora z (jak w przykładzie)

Me.prototype = new You(); 

co spowodowałoby, że nowe Me() odziedziczyły po obiekcie Ty. Jednak this.name w Me() funkcja będzie przesłaniać jeden odziedziczony ty tak zrobić coś takiego:

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

Dzięki. To działa. –

0

try:

Me.prototype = new You(); 

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


    alert(somebody.name); 
+0

Nie, to nie działa. –

13

Me.prototype.constructor właściwość jest tylko własność publiczna Me.prototype , nie jest w żaden sposób wykorzystywany do budowy nowych obiektów lub rozwiązywania nazw właściwości.

Jedyne niejasne zainteresowanie polega na tym, że początkowo odwołuje się do funkcji, do której "prototyp" należy, i że instancje dziedziczą ją. Ponieważ jest to właściwość publiczna, która może być łatwo przypisana do nowej wartości lub ocieniona, nie jest szczególnie niezawodna, chyba że masz ścisłą kontrolę nad nią i kod z niej korzystający.

Powiązane problemy