如何将na对象属性重置为默认属性?

时间:2012-11-23 17:42:32

标签: javascript jquery object methods properties

我正在使用jQuery,我仍然是JavaScript的新手。我正在实现一个对象如下:

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

正如您在上面的代码中所看到的,我可以通过运行properties来重置MyObject.resetProperties()但是,为了做到这一点,我将{em>两次表示{{1}变量。如何在不重复该代码的情况下完成同样的事情?


更新

我尝试执行以下操作:

[{}]

但我得到“MyObject = { properties : this.propertiesDefault, resetProperties : function resetProperties() { this.properties = [{}] }, propertiesDefault: [{}] }; ”,我不确定这是否正确。

3 个答案:

答案 0 :(得分:1)

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

我建议使用默认值,并在初始化和重置功能中克隆它。由于您使用jQuery标记了您的问题,我假设您很乐意使用以下内容克隆该对象:

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

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

What is the most efficient way to deep clone an object in JavaScript?

这是jQuery.extend的文档:

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

答案 1 :(得分: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相同。因此,我们不能像那样重置。

答案 2 :(得分: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();