设置对象属性的默认值

时间:2015-11-04 19:13:15

标签: javascript object

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,默认为蓝色,但如果将其设置为绿色,则应忽略蓝色。

上面的代码显然不可执行,但我能做些类似的工作吗?

3 个答案:

答案 0 :(得分:1)

你可以通过一些反思来达到这个目的。

我创建了一个函数的粗略实现,它接受一个对象,一个属性的名称和一个默认值。它会为相关属性创建getset方法。

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"}