如何基于JavaScript中的另一个对象动态创建属性和对象?

时间:2014-12-13 17:55:27

标签: javascript jquery

我有一个场景,我需要从source对象创建一个新的result对象。

该对象需要具有source的所有属性,并添加"方法",根据属性和基于模板执行的代码进行命名(在我的模板中)案例alert(this.x))。

注意:脚本应该考虑source

中的任意数量的属性

我想知道:

  • 是否可以在JS中完成?
  • 适当的技术是什么?
  • 任何例子?

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);
        }
    }

注意:处理源对象后会创建结果

编辑:

基于您的答案的最终解决方案

http://jsfiddle.net/kbnd6e5c/1/

3 个答案:

答案 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;
&#13;
&#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;

Source