使用对象文本和默认值创建javascript类的最佳方法
创建javascript类的最佳方法是什么,这样就可以通过传入对象文本来创建对象,同时维护类中设置的默认值使用对象文本和默认值创建javascript类的最佳方法,javascript,object,Javascript,Object,创建javascript类的最佳方法是什么,这样就可以通过传入对象文本来创建对象,同时维护类中设置的默认值 var brett = new Person({ name: 'Brett' ,age: 21 //gender: 'male' //The default is female, so brett.gender will be female }); 可能通过如下方式定义构造函数: function Person(props) { this.name = p
var brett = new Person({
name: 'Brett'
,age: 21
//gender: 'male' //The default is female, so brett.gender will be female
});
可能通过如下方式定义构造函数:
function Person(props) {
this.name = props.name;
this.age = props.age;
this.gender = props.gender || 'female';
}
。。。虽然如果您曾经想要传递错误的性别(例如,'
,0
,false
,null
或未定义的
),默认值仍将使用。如果这是一个问题,您可以执行以下操作:
function Person(props) {
// expected properties
this.name = props.name;
this.age = props.age;
// optional properties
var defaults = {
gender: 'female'
// etc
};
for (var k in defaults) {
this[k] = props.hasOwnProperty(k) ? props[k] : defaults[k];
}
}
可能通过如下方式定义构造函数:
function Person(props) {
this.name = props.name;
this.age = props.age;
this.gender = props.gender || 'female';
}
。。。虽然如果您曾经想要传递错误的性别(例如,'
,0
,false
,null
或未定义的
),默认值仍将使用。如果这是一个问题,您可以执行以下操作:
function Person(props) {
// expected properties
this.name = props.name;
this.age = props.age;
// optional properties
var defaults = {
gender: 'female'
// etc
};
for (var k in defaults) {
this[k] = props.hasOwnProperty(k) ? props[k] : defaults[k];
}
}
您可以进行浅层克隆:
function shallow_clone(target, source) {
for (var i in source) {
if (typeof target[i] == "undefined") {
target[i] = source[i];
}
}
};
然后:
function Person(opts) {
var defaults = { gender: 'male' };
shallow_clone(this, opts);
shallow_clone(this, defaults);
....
};
如果您需要选项的深层副本,您可以制作一个深层克隆()(显然更复杂)。您可以制作一个浅层克隆:
function shallow_clone(target, source) {
for (var i in source) {
if (typeof target[i] == "undefined") {
target[i] = source[i];
}
}
};
然后:
function Person(opts) {
var defaults = { gender: 'male' };
shallow_clone(this, opts);
shallow_clone(this, defaults);
....
};
如果您需要更深层的选项副本,您可以制作一个深层克隆()(显然更复杂)。您也可以使用jQuery的
$.extend()
您也可以使用jQuery的$.extend()
谢谢!我不知道这个存在。我正在使用jquery,所以这将非常有用。谢谢!我不知道这个存在。无论如何,我都在使用jquery,所以这将非常有用。