我有一个场景,我需要从 source
对象创建一个新的 result
对象。
该对象需要具有来自源
的所有属性,并添加“方法”,并根据属性进行命名,并根据模板执行代码(在我的例子中警报(this.x)
)。
注意:脚本应考虑来自源
的任意数量的属性
我想知道:
- 可以用JS实现吗?
- 合适的技术是什么?
- 有什么例子吗?
来自源对象
var source = {
a: 'a',
b: 'b'
};
我需要动态创建结果对象(通过某些函数)
var result = {
a: 'a',
b: 'b',
_setA: function(){
alert(this.a);
},
_setB: function(){
alert(this.a);
}
}
注意:结果是在处理源对象后创建的
编辑:
基于您的答案的最终解决方案
最佳答案
您可以先使用$.extend
方法来复制属性,然后您需要迭代属性并创建动态 setter 。例如下面的代码:
var source = { a: 'a', b: 'b' };
var result = $.extend({}, source);
Object.keys(source).forEach(function(key) {
result['_set' + key[0].toUpperCase() + key.slice(1)] = function(value) {
alert(this.key);
this[key] = value;
}
});
查看下面的工作演示。
var source = { a: 'a', b: 'b', test: 'test' };
var result = $.extend({}, source);
Object.keys(source).forEach(function(key) {
result['_set' + key[0].toUpperCase() + key.slice(1)] = function(value) {
this[key] = value;
}
});
alert([ result.a, result.test ]);
result._setA('a1');
result._setTest('test1');
alert([ result.a, result.test ]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
关于javascript - 如何在 JavaScript 中基于另一个对象动态创建属性和对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461905/