你可以用一點反射來實現這一目標。
我已經創建了一個函數的粗略實現,它接受一個對象,一個屬性的名稱和一個默認值。它爲相關財產創建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