我有一个场景,我需要从source
对象创建一个新的result
对象。
该对象需要具有source
的所有属性,并添加"方法",根据属性和基于模板执行的代码进行命名(在我的模板中)案例alert(this.x)
)。
注意:脚本应该考虑source
我想知道:
FROM SOURCE OBJECT
var source = {
a: 'a',
b: 'b'
};
我需要动态创建结果OBJ(通过某些功能)
var result = {
a: 'a',
b: 'b',
_setA: function(){
alert(this.a);
},
_setB: function(){
alert(this.a);
}
}
注意:处理源对象后会创建结果
编辑:
基于您的答案的最终解决方案
答案 0 :(得分:1)
您可以先使用$.extend
方法复制属性,然后需要遍历属性并创建动态设置器。例如,如下面的代码:
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>
&#13;
答案 1 :(得分:0)
我不确定我是否完全理解你的问题,但我认为你应该使用这个简单的事情:
var copy = result
copy.example = {
x: Y,
z, T
}
copy.newFuntion = function(){...} //add your own function
这样你就拥有了所有结果+你自己的东西
答案 2 :(得分:0)
您可以这样做:
var result = {
a: 'A',
b: 'B'
};
var copy = result;
Object.keys(result).forEach(function(key) {
Object.defineProperty(copy, "_set" + key, {
get: function() {
return result[key];
}
})
});
copy._seta;
copy._setb;