2011-06-30 84 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()的繼承對象你。然而,在我this.name()函數會掩蓋一個繼承了你那麼做這樣的事情:

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它不會以任何方式用於構建新對象或解析屬性名稱。

它具有的唯一含糊的興趣在於它內在地引用了其原型「屬於」的功能,並且Me的實例繼承它。因爲它是一個公共財產,可以很容易地分配一個新的價值或陰影,它是不是特別可靠,除非你嚴格控制它和使用它的代碼。