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

标签 javascript jquery

我有一个场景,我需要从 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);
        }
    }

注意:结果是在处理源对象后创建的

编辑:

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

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

最佳答案

您可以先使用$.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/

相关文章:

javascript - Array.sort 的这个中间阶段发生了什么?

javascript - bootstrap-datetimepicker : display value of input

javascript - 如何等待 jQuery Ajax 请求从 WatiN 完成?

javascript - 使用 tr.remove() 删除 HTML 表格的行,提交按钮只发回它上面的行而不是下面的行

javascript - 警报对话框无法关闭

javascript - 我的 javascript for-in 循环出了什么问题

javascript - 如何检查 Jquery 是否被正确保存和嵌入?

javascript - 如何在谷歌应用程序脚本中刷新标签而不重新加载页面

javascript - 如何使模式内的图像可点击

javascript - 使用 Javascript not 运算符时出现奇怪的结果