1

我正在使用 jQuery,但我对 JavaScript 还是很陌生。我正在实现一个对象,如下所示:

MyObject = {
  properties     : [{}],
  resetProperties: function resetProperties() { this.properties = [{}] }
};

正如你在上面的代码中看到的,我可以properties通过运行来重置,MyObject.resetProperties()但是为了做到这一点,我声明了变量的两倍。[{}]我应该如何在不重复该代码的情况下完成同样的事情?


更新

我尝试执行以下操作:

MyObject = {
  properties       : this.propertiesDefault,
  resetProperties  : function resetProperties() { this.properties = [{}] },
  propertiesDefault: [{}]
};

但我得到“ TypeError: invalid 'in' operand MyObject.properties”,我不确定这是正确的方法。

4

3 回答 3

1

在我看来,避免将默认/重置属性作为要修改的对象的单独对象是不可能的。

我建议使用默认值,并将其克隆到您的初始化和重置函数中。由于您使用 jQuery 标记了您的问题,我假设您很乐意使用它来克隆对象:

MyObject = {
    defaultProperties : [{}],
    properties : jQuery.extend(true, {}, this.defaultProperties),
    resetProperties: function() { 
        this.properties = jQuery.extend(true, {}, this.defaultProperties);
    }
};

有关克隆对象的更多信息,请参阅此 Stack Overflow 问题:

在 JavaScript 中深度克隆对象的最有效方法是什么?

这是 jQuery.extend 的文档:

http://docs.jquery.com/Utilities/jQuery.extend

于 2012-11-23T18:32:11.537 回答
0

取决于你想要什么。由于您是 javascript 新手,您可能不熟悉使用函数创建自定义对象,这是一般的 javascript "OOP" 方式。

function MyObjectClass() {
    this.properties = null;
    this.resetProperties();
}
MyObjectClass.prototype.resetProperties = function () { this.properties = [{}] };

var MyObject= new MyObjectClass();

但我们并不真正知道该功能MyObject需要实现。可能需要它是一个普通的旧 javascript 对象。或者也许不是,你已经完成了。

当然,您始终可以直接:

MyObject = {
          properties     : null,
          resetProperties: function () { this.properties = [{}];}
        };
MyObject.resetProperties();
于 2012-11-23T21:13:22.270 回答
0

据我所知这是不可能的。您将不得不对属性重置进行硬编码。我尝试在对象外部设置变量缓存,但是当我重置属性时,不幸的是它保持了它的值。

 var obj = {
     p: [ {} ],
     r: function() { this.p = this.cache; }
 };

 obj.cache = obj.p; // attempt to set to original

 obj.p[0].m = 5; // modify

 obj.r(); // reset

 --------

 >>> obj.p[0].m; // 5

我们可以假设该cache属性正在以与原样相同的方式进行修改p。因此,我们不能那样重置。

于 2012-11-23T17:46:52.117 回答