这是使用默认属性创建javascript类的正确方法吗(即使这里有些属性为null),还有选项添加可以包含某些属性的特定值的创建参数以对象格式/ 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" */
答案 0 :(得分:0)
我不这样做。我会做的
QM.Person=function(data)
{
data = data || {};
this.PersonID= data.PersonId || null;
this.Name_Last= data.Name_Last || "";
...
}
您会注意到我假设您关注明确类型,即当您指定null
时,您需要null
,而不是undefined
。 ""
也是如此。
我认为这比创建一个函数并执行它来清理数据更简单
最后,您要添加到函数中的所有方法都应该在原型上。属性应 NOT 在原型上,除非您希望所有实例共享相同的属性。由于您没有除数据清理器之外的任何方法,因此您所显示的任何方法都不应该用于原型。
答案 1 :(得分: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);