values
中的一个property
可以多个objects
吗?这就是我的意思:
// Note: This will give you an error if you try this. It's just an example.
var person = {
name: "John",
eyeColor: "blue" | "green"
};
它应该如何运作:
因此对于eyeColor
,默认为蓝色,但如果将其设置为绿色,则应忽略蓝色。
上面的代码显然不可执行,但我能做些类似的工作吗?
答案 0 :(得分:1)
你可以通过一些反思来达到这个目的。
我创建了一个函数的粗略实现,它接受一个对象,一个属性的名称和一个默认值。它会为相关属性创建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"
答案 1 :(得分:0)
对象中的一个属性是否可以有多个值?
是的,这样的事情可以做到:
var person = {
name: "John",
eyeColor: ["blue","green"]
};
这回答了你的第一个问题。
注意:我认为你的逻辑有点不连贯恕我直言。
对于你的第二个要求,我认为你最好写一个setter函数:
var person = {
name: "John",
eyeColor: "blue",
setEyeColor:function(color){ this.eyeColor=color;}
};
alert(person.eyeColor);
person.setEyeColor('purple');
alert(person.eyeColor);
答案 2 :(得分:0)
以下是您尝试完成的一个非常小的示例,并且您尝试完成它的相同样式...如果您没有传递eyeclr
的arg,它将默认在这里“蓝色”。
function newPerson(nm, eyeclr) {
return {
name: nm,
eyeColor: eyeclr || "blue"
};
}
> newPerson('john')
Object {name: "john", eyeColor: "blue"}
> newPerson('john', 'green')
Object {name: "john", eyeColor: "green"}