[英]Javascript: setting object properties
I want to be able to do this: 我希望能够这样做:
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'});
Desired Outcome: 期望的结果:
var user1 = {
name: 'John',
gender: 'male',
email: 'john@gmail.com'
}
var user2 = {
name: 'Jenny',
gender: 'female',
email: 'james@gmail.com'
}
I want a method that will set attributes according to what is passed into the function. 我想要一个方法,根据传递给函数的内容设置属性。 Is the attribute doesn't exist I want it to be created, if it does, I want it to be overwritten.
该属性是否存在我希望它被创建,如果属性,我希望它被覆盖。
Does a method like this exist in Javascript? Javascript中是否存在这样的方法?
This is normally called extending your object. 这通常称为扩展您的对象。 Virtually every JavaScript library has its own method to do this.
事实上,每个JavaScript库都有自己的方法来执行此操作。 Or you can write your own in a few lines of code.
或者你可以用几行代码编写自己的代码。
Using jQuery's method, you'd do it like so: 使用jQuery的方法,你会这样做:
var user1 = {
name: 'John',
gender: 'male'
};
$.extend(user1, {
email: 'john@gmail.com'
});
user1.email === 'john@gmail.com'; //true
No, You don't want to do this. 不,你不想这样做。
The only way to add a method to all objects is to extend Object.prototype
. 向所有对象添加方法的唯一方法是扩展
Object.prototype
。
Doing so (in ES3 browsers like IE8) has a consequence of adding properties to enumerations. 这样做(在IE8等ES3浏览器中)会导致向枚举添加属性。
For example: 例如:
Object.prototype.extend = function (o) {
// clone properties of o into this
};
var someObj = {};
for (var key in someObj) {
console.log(key); // "extend"
}
The best you can do is use Object.extend
您可以做的最好的事情是使用
Object.extend
Object.extend(user2, {
name: "Jenny",
gender: "female"
});
pd has an implementation of extend
or you can use: pd有一个
extend
的实现,你可以使用:
Object.extend = function (target, source) {
for (var key in source) {
target[key] = source[key];
}
};
If you are willing to use jquery, you can use it's extend method, along with some defaults that will make sure all of the properties you want are set correctly. 如果您愿意使用jquery,可以使用它的extend方法,以及一些默认值,以确保正确设置所需的所有属性。
Something like this: 像这样的东西:
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.