我希望能够这样做:
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中是否存在这样的方法?
答案 0 :(得分:6)
这通常称为扩展您的对象。事实上,每个JavaScript库都有自己的方法来执行此操作。或者你可以用几行代码编写自己的代码。
使用jQuery的方法,你可以这样做:
var user1 = {
name: 'John',
gender: 'male'
};
$.extend(user1, {
email: 'john@gmail.com'
});
user1.email === 'john@gmail.com'; //true
答案 1 :(得分:3)
不,你不想这样做。
向所有对象添加方法的唯一方法是扩展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];
}
};
答案 2 :(得分:2)
如果您愿意使用jquery,可以使用它的extend方法,以及一些默认值,以确保正确设置所需的所有属性。
这样的事情:
function whatever(obj1) {
var defaults = {
name: 'Foo Bar',
email: 'email@example.com',
gender: 'male'
};
return $.extend(defaults, obj1);
}