[英]Javascript: setting object properties
我希望能夠這樣做:
var user1 = {
name: 'John',
gender: 'male'
}
var user2 = {
name: 'James',
gender: 'male',
email: 'james@gmail.com'
}
user1.someSetMethod({email: 'john@gmail.com'});
user2.someSetMethod({name: 'Jenny', gender: 'female'});
期望的結果:
var user1 = {
name: 'John',
gender: 'male',
email: 'john@gmail.com'
}
var user2 = {
name: 'Jenny',
gender: 'female',
email: 'james@gmail.com'
}
我想要一個方法,根據傳遞給函數的內容設置屬性。 該屬性是否存在我希望它被創建,如果屬性,我希望它被覆蓋。
Javascript中是否存在這樣的方法?
這通常稱為擴展您的對象。 事實上,每個JavaScript庫都有自己的方法來執行此操作。 或者你可以用幾行代碼編寫自己的代碼。
使用jQuery的方法,你會這樣做:
var user1 = {
name: 'John',
gender: 'male'
};
$.extend(user1, {
email: 'john@gmail.com'
});
user1.email === 'john@gmail.com'; //true
不,你不想這樣做。
向所有對象添加方法的唯一方法是擴展Object.prototype
。
這樣做(在IE8等ES3瀏覽器中)會導致向枚舉添加屬性。
例如:
Object.prototype.extend = function (o) {
// clone properties of o into this
};
var someObj = {};
for (var key in someObj) {
console.log(key); // "extend"
}
您可以做的最好的事情是使用Object.extend
Object.extend(user2, {
name: "Jenny",
gender: "female"
});
pd有一個extend
的實現,你可以使用:
Object.extend = function (target, source) {
for (var key in source) {
target[key] = source[key];
}
};
如果您願意使用jquery,可以使用它的extend方法,以及一些默認值,以確保正確設置所需的所有屬性。
像這樣的東西:
function whatever(obj1) {
var defaults = {
name: 'Foo Bar',
email: 'email@example.com',
gender: 'male'
};
return $.extend(defaults, obj1);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.