【问题标题】:Changing constructor in JavaScript在 JavaScript 中更改构造函数
【发布时间】:2011-06-30 01:54:07
【问题描述】:

我正在尝试为一个对象切换构造函数,但我失败了。继续代码将显示我需要的示例。谢谢。

    <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>

【问题讨论】:

    标签: javascript


    【解决方案1】:

    Me.prototype.constructor 属性只是 Me.prototype 的公共属性,它不会以任何方式用于构造新对象或解析属性名称。

    它唯一模糊的兴趣是它最初引用了它的原型“属于”的函数,并且 Me 的实例继承了它。因为它是一个公共属性,可以很容易地被分配一个新值或被遮蔽,所以它不是特别可靠,除非你对它和使用它的代码有严格的控制。

    【讨论】:

      【解决方案2】:

      您不能更改对象的构造函数,但是可以更改构造函数返回的对象的“类型”(如您的示例中所示)

      Me.prototype = new You();
      

      这将导致 new Me()'s 从对象 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); 
      

      【讨论】:

      • 输出是“Ivan”,为不想跑步的人澄清一下
      【解决方案3】:

      尝试:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-01
        • 2014-03-12
        • 1970-01-01
        • 2012-07-02
        • 1970-01-01
        • 2016-08-18
        • 2012-09-22
        相关资源
        最近更新 更多