同时为现有对象添加属性
Add attributes to existing object at same time
假设我有这样一个简单的对象:
var User = {
name: 'Hans',
get_name: function(){return this.name},
street: 'Kings',
postcode: '482932',
city: 'New York'
}
为了更好地概述,我想这样做:
var User = {
name: 'Hans',
get_name: function(){return this.name},
};
//Adress Information
User.add({
street: 'Kings',
postcode: '482932',
city: 'New York'
});
正如预期的那样,这不起作用。要达到类似的效果,我可以这样写:
User.street = 'Kings';
User.postcode = '482932';
.......
但是我想同时添加几个属性。有方便的功能吗?由于
使用ES6(这将覆盖现有的属性):
Object.assign(User, { /* some new props */ });
使用lodash(这不会覆盖现有的属性):
_.extend(User, { /* some new props */ });
在ES5中通过向User:
添加一个方法User.add = function(newProps) {
Object.keys(newProps).forEach(function(prop) {
this[prop] = newProps[prop];
}.bind(this));
};
真的,如果你想遵循OO的"原则",add
方法应该放在User.prototype
中。
一个解决方案:
var User = {
name: 'Hans',
get_name: function(){return this.name},
};
User.add = function(obj){
var me = this;
Object.keys(obj).forEach(function(o){
if(! me[o] ) me[o] = obj[o];
})
}
//Adress Information
User.add({
street: 'Kings',
postcode: '482932',
city: 'New York'
});
console.dir(User)
/*
name "Hans"
get_name function()
add function(obj)
street "Kings"
postcode "482932"
city "New York"
*/
var User = {
name: 'Hans',
get_name: function(){return this.name},
};
User.add = function(obj){
var me = this;
Object.keys(obj).forEach(function(o){
if(! me[o] ) me[o] = obj[o];
})
return this;
}
//Adress Information
User.add({
street: 'Kings',
postcode: '482932',
city: 'New York'
});
console.dir(User);
/*
name "Hans"
get_name function()
add function(obj)
street "Kings"
postcode "482932"
city "New York"
*/
document.getElementById('el').innerHTML = '<pre>'+JSON.stringify(User , null , ' ')+'</pre>';
<div id='el'><div>
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Meteor-将选定窗体中的对象添加到集合中
- 在play2框架中向json对象添加下拉列表项
- 如何在javascript上向数组的对象添加新元素
- JSON到对象数组,并向每个对象添加项
- 如何将一个对象添加到每个对象数组中
- 向Angular作用域对象添加对象数组——TypeError
- CoffeeScript将对象添加到数组中
- 如何从Addon SDK向选项卡对象添加进度侦听器
- 使用ja将对象添加到HTML画布中
- 向通过ReST JSON调用生成的Angular Javascript对象添加方法
- 将新对象添加到本地存储
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 使用游标循环将JS对象添加到数组中
- 向调用全局javascript函数的对象添加处理程序
- 将另一个文件中的对象添加到单独文件中的阵列中
- 将对象添加到数组中
- 为新对象添加函数,将对象添加到数组中.理解困难'这'关键字
- sequelize为找到的对象添加值
- 向对象添加新方法和值,同时避免重复