2015-11-04 210 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"