在JavaScript中更改构造函数

Dex*_*olf 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>
Run Code Online (Sandbox Code Playgroud)

Rob*_*obG 12

Me.prototype.constructor物业仅的公共属性Me.prototype,它不是在新的对象或属性名称的分辨率建设任何方式使用.

它唯一模糊的兴趣是它最初引用其原型"属于"的函数,并且我的实例继承它.因为它是一个公共属性,很容易被分配一个新的值或被遮挡,除非你对它和使用它的代码有严格的控制,否则它不是特别可靠.


jzi*_*lla 5

您无法更改对象的构造函数,但您可以更改构造函数返回的对象的"类型"(如示例中所示)

Me.prototype = new You();
Run Code Online (Sandbox Code Playgroud)

这将导致新的Me()从对象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); 
Run Code Online (Sandbox Code Playgroud)

  • 输出是“Ivan”,为不想跑步的人澄清 (2认同)