0

这是使用默认属性创建 javascript 类的正确方法(即使这里有些是空的),还可以选择添加一个创建参数,该参数可以包含对象格式/json 中列出的某些属性的特定值?

如果我要创建许多 Person 对象,我是否应该将其中的任何内容放入 Person 的原型中以节省内存?

这对我有用,但我想知道这是否是一个好方法?

// PERSON Class -----------------------------------------------
 QM.Person=function(data)
 {
    /* Closure for this */
    var my = this;

    this.PersonID=null;
    this.Name_Last="";
    this.Name_First="";
    this.Date_Birth=null;
    this.Biography="";

    this.loadData=function(obj) {
        for (var i in obj) {
            if (my.hasOwnProperty(i)) {
                my[i] = obj[i];
            }
        }
    }

    this.loadData(data);
}

使用此类创建的示例:

jondoe = new Person();

bob = new Person({Name_First:"Bob",Name_Last:"Bar"});

jondoe.Name_First   /*  ""     */
bob.Name_First     /*   "Bob"  */
4

2 回答 2

0

我不会那样做的。我会做

QM.Person=function(data)
{
    data = data || {};

    this.PersonID= data.PersonId || null; 
    this.Name_Last= data.Name_Last || ""; 
    ...
}

你会注意到我假设你关心显式类型,即当你分配时null,你想要null,而不是undefined。同样的事情""

我认为这比创建一个函数并执行它来清理你的数据更简单

最后,您要添加到函数中的所有方法都应该在原型上。属性应该在原型上,除非您希望所有实例共享相同的属性。由于除了数据清理器之外您没有任何方法,因此您所展示的任何内容都不应该出现在原型上。

于 2012-07-29T02:33:24.727 回答
0

为避免重复自己,您可以构建您期望的键列表以及如果未指定要插入的默认值:

MyType = function(data){
    var keys = this.keys,
        data = data || {},
        key

    for (key in keys) {
        if (keys.hasOwnProperty(key)) {
            if (data.hasOwnProperty(key)) {
                this[key] = data[key];
            } else {
                this[key] = keys[key];
            }
        }
    }      
};

MyType.prototype.keys = {
    personId: null,
    firstName: 'A default first name',
    lastName: ''
};

var o1 = new MyType();
var o2 = new MyType({
    personId: 1,
    firstName: 'Override'
});
console.log(o1, o2);
于 2012-07-29T02:52:30.177 回答