【问题标题】:Javascript - instantiate an object which it's properties had been modifiedJavascript - 实例化一个其属性已被修改的对象
【发布时间】:2014-04-08 08:10:07
【问题描述】:

编辑: 假设我创建了一个构造函数来创建我自己的用户定义对象:

var Person = Person(age) { this._age = living; };

我发现在运行时我需要向这个构造函数创建的对象添加另一个属性,所以我用它来添加原型的属性。

Person.prototype.alive;

现在我唯一的构造函数只得到 1 个 val,是否可以向同一个构造函数发送另一个 val?说类似 var newPerson = Person(20,''yes);

【问题讨论】:

  • 发送此类构造函数值是什么意思?
  • 你的问题和你的例子都难以理解。您正在谈论创建一个 object 并通过创建一个 constructor 来演示它;然后在所述构造函数中使用未定义的变量,而忽略其参数;然后您谈论“向此构造函数发送值”,这没有任何意义。考虑编辑您的问题并更清楚地描述您的问题。
  • 你需要proxies。不幸的是,它们还没有在 JavaScript 中实现。你的用例是什么?我相信一定有更简单的方法来解决您的问题。
  • 您将收到以下信息:ReferenceError: living is not defined.

标签: javascript constructor prototype objectinstantiation


【解决方案1】:

是否可以向同一个构造函数发送另一个 val?说类似var newPerson = Person(20,'yes');

没有。你的构造函数只接受一个参数。

但你可以redefine the constructor,在你的情况下:

Person = (function (original) {
    function Person(age, alive) {
        original.call(this, age);          // apply constructor
        this.alive = alive;                // set new property from new parameter
    }
    Person.prototype = original.prototype; // reset prototype
    Person.prototype.constructor = Person; // fix constructor property
    return Person;
})(Person);

请注意,在此之前创建的旧对象将自动获得新值。您需要为您知道的每个旧实例显式设置它们,例如 oldPerson.alive = 'no';

【讨论】:

    【解决方案2】:

    如果您考虑将不同的参数传递给构造函数,编写构造函数接受单个对象说明符会更友好

    function Person({paramZ: val, paramX: val})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-31
      • 2020-12-27
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2021-08-18
      • 1970-01-01
      相关资源
      最近更新 更多