将Javascript类重置为其默认值

时间:2013-01-05 22:21:34

标签: javascript class

非常愚蠢的问题,但是我之前正在考虑这个问题而且我从来没有尝试过这样做...让我说我有一个这样的课程:

function Drug () {
  this.name = '';
  this.type = '';
}

稍后在页面中我为这种药物设定了一些值:

var drug = new Drug();
drug.name = 'Testing';
drug.type = 'TestType';

有没有一种简单的方法可以让我们将这个药物实例重新启动到默认设置,而不用执行以下操作:

var drug2 = new Drug();

就像某种重置功能一样,我可以在Drug内创建drug.reset();

我尝试过:this.clear = function () { return new Drug(); }但是这并没有成功......

3 个答案:

答案 0 :(得分:4)

你只是稍微过度思考它。不是直接在构造函数中初始化这些属性,而是创建一个初始化它们的init()方法,由构造函数调用。然后,您可以调用它来重新初始化对象的属性。

function Drug () {
  this.init();
}
Drug.prototype.init = function() {
  this.name = '';
  this.type = '';
}

// Instantiate:
var d = new Drug();
d.name = 'Testing';
console.log(d);
// Drug {name: "Testing", type: ""}

// Re-initialize it
d.init();
console.log(d);
// Drug {name: "", type: ""}

这当然不是你能够处理它的唯一方法,但首先想到的是。

答案 1 :(得分:2)

通过这种方式,您可以稍后重新定义默认值或添加/删除它们

function Drug() {
  this.init();
}

// initializer
(function(obj) {
  obj.prototype.init = function() {
    for ( var k in obj.prototype ) {
      this[ k ] = obj.prototype[ k ];
    }
  }
}(Drug));

// define here all default properties
Drug.prototype.name = '';
Drug.prototype.type = '';



var drug = new Drug();
drug.name = 'Testing';
drug.type = 'TestType';

console.log( drug );
drug.init();
console.log( drug );

在这里亲自尝试:http://jsfiddle.net/bukfixart/vzsFw/

答案 2 :(得分:1)

在课堂上提供可公开访问的属性的一种相当普遍的形式。

从这里开始,您可以构建一个配置对象(在构造函数中),以运行默认值。

var Drug = function (cfg) {
    var defaults = {
        key : "val"
    };

    this.init = function () {
        var key, val;
        for (key in defaults) {
            if (defaults.hasOwnProperty (key)) {
                val = defaults[key];
                this[key] = val;
            }
        }
        if (cfg) {
            for (key in cfg) {
                if (cfg.hasOwnProperty(key)) {
                   val = cfg[key];
                   this[key] = val;
                }
            }
        }
    };

    this.reset = this.init;

    this.init();
};

此处.reset()只是.init()之上的糖 但是,如果您愿意,可以将默认应用程序和配置应用程序分开,以便.reset()忽略配置并使用默认值...

有十亿种方法可以做到这一点,但是这里可以让你保留这个特定创建对象的私有状态,同时重置公开的属性。