簡體   English   中英

如何基於JavaScript中的另一個對象創建屬性並動態創建對象?

[英]How to create properties to and object dynamically based on another object in JavaScript?

我有一個場景,其中需要從source對象創建一個新的result對象。

該對象將需要完全具有source所有屬性,並添加“方法”,並基於屬性命名並基於模板執行代碼(在我的情況下是alert(this.x) )。

注意:腳本應考慮來自source任何數量的屬性

我想知道:

  • 可以在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方法復制屬性,然后需要遍歷屬性並創建動態設置器。 例如下面的代碼:

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> 

我不確定我是否完全理解您的問題,但我認為您應該使用這一簡單的方法:

var copy = result
copy.example = {
    x: Y,
    z, T
}
copy.newFuntion = function(){...} //add your own function

這樣,您擁有的所有結果都會擁有+您自己的東西

您可以執行以下操作:

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;

資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM