2011-06-30 70 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的实例继承它。因为它是一个公共财产,可以很容易地分配一个新的价值或阴影,它是不是特别可靠,除非你严格控制它和使用它的代码。