你可以用一点反射来实现这一目标。
我已经创建了一个函数的粗略实现,它接受一个对象,一个属性的名称和一个默认值。它为相关财产创建get和set方法。
function addDefaultProperty(object, propName, defaultValue) {
var propValue;
Object.defineProperty(object, propName, {
// this method is called when the property is set
// e.g. object.propName = value
set: function(value) {
propValue = value;
},
// this method is called when the property is accessed
// e.g. console.log(object.propName)
get: function() {
var hasValue = typeof propValue != 'undefined';
return hasValue ? propValue : defaultValue;
}
});
return object;
}
然后,您可以根据需要简单地创建对象,并使用该方法创建具有默认值的属性。
var person = {
name: "John",
};
addDefaultProperty(person, 'eyeColor', 'blue');
console.log(person.eyeColor); // "blue"
person.eyeColor = "green";
console.log(person.eyeColor); // "green"
person.eyeColor = undefined;
console.log(person.eyeColor); // "blue"
我想你问的两个不同的问题... – rnevius
@rnevius这是一个问题,但它以这样的方式问,似乎就像两个... – Tgsmith61591
感谢@ Tgsmith61591!我喜欢你编辑问题的方式! – Jessica