【问题标题】:reinitializing javascript object's properties重新初始化 javascript 对象的属性
【发布时间】:2010-06-06 17:17:13
【问题描述】:

在我的 Javascript 拖放构建应用程序中,可以构建各种建筑物。这些的具体特征都保存在一个对象中,比如

var buildings = {
house: ['#07DA21',12,12,0,20],
bank: ['#E7DFF2',16,16,0,3],
stadium: ['#000000',12,12,0,1],
townhall: ['#2082A8',20,8,0,1],
etcetera
}

所以每栋建筑都有许多特征,比如颜色、大小、外观,可以称为建筑[townhall][0](指颜色)。对象随着用户改变事物而改变。但是,当单击“重置”时,应该将整个对象再次重置为其初始设置以重新开始,但我不知道该怎么做。对于普通物体来说,它是这样的。

function building() {}
var building = new building();
delete building;
var building2 = new building();

您可以轻松删除并重新制作它,因此属性会被重置。但是我的对象是自动初始化的。有没有办法将我的对象变成可以删除和新创建的东西,而不会使它变得非常复杂,或者有更好的方法来存储这些信息?

【问题讨论】:

  • 你不能在全局范围内声明delete属性,也不能delete函数。见perfectionkills.com/understanding-delete/#property_attributes
  • 读起来很有趣,但是有没有办法以不同的方式设置我的代码,使其不是全局的,因此可以删除,就像用'new'声明的对象的例子?跨度>
  • @Marcel,当然你可以删除全局变量(变量因为你没有声明属性)。
  • @Sean:你真的试过了吗?例如:var foo=1; console.log(delete foo); 输出 false
  • @Marcel,我被控制台使用 eval 的事实所愚弄,其行为不同(如文章中所述)。

标签: javascript object reset


【解决方案1】:

您可以将初始状态保留为对象的原型。

var Base = function(){};
    Base.prototype={a:1,b:2};
var c = new Base();

现在,您可以将 a 或 b 的值更改为您想要的任何值。 要恢复,只需使用

delete c.a or delete c.b

你会得到你的初始值。 希望对您有所帮助。

【讨论】:

    【解决方案2】:

    只需使用复制/克隆的方法即可恢复原始状态

    var defaults = {
        foo: "bar"
    };
    var building;
    
    function reset(){
        building = {};
        for (var key in defaults) {
            if (defaults.hasOwnProperty(key){
                building[key] = defaults[key];
            }
        }
    }
    

    现在您可以在需要重置building 时致电reset()

    【讨论】:

      猜你喜欢
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多