2015-11-04 156 views
0

是否可以多个values一个propertyobjects?这就是我的意思是:设置对象属性的默认值

// Note: This will give you an error if you try this. It's just an example. 
var person = { 
    name: "John", 
    eyeColor: "blue" | "green" 
}; 

应该如何工作的:
所以对于eyeColor,默认是蓝色的,但如果它被设置为绿色,那么它应该忽略的蓝色。

上面的代码显然不可执行,但有什么类似的,我可以做到这一点?

+1

我想你问的两个不同的问题... – rnevius

+1

@rnevius这是一个问题,但它以这样的方式问,似乎就像两个... – Tgsmith61591

+1

感谢@ Tgsmith61591!我喜欢你编辑问题的方式! – Jessica

回答

0

这里是你要完成的一个非常小的例子,并在相同的风格,你要完成它......如果你不传递eyeclr的精氨酸,它会默认到'蓝色'在这里。

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"} 
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); 
+1

这不是他问的问题。是的,这是对第一句话的直接回答,但是他写下了“这就是我的意思”来澄清他的意图。你不能从问题中挑选出来。 – Barmar

+0

我的回答仍在工作中。 –

+2

你似乎仍然在对待这个问题,就好像有两个问题一样。没有“第一个”和“第二个”的要求,只有一个关于具有属性默认值的对象的问题。 – Barmar

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"