【问题标题】:Javascript: combine 2 objects into oneJavascript:将 2 个对象合二为一
【发布时间】:2014-08-16 22:05:46
【问题描述】:

是否可以将变量 C 定义为 2 个对象(假设 A 和 B)的组合,以便 A 和 B 发生任何事情在未来的任何时间都会发生C. 这意味着,C 在对 A 和 B 进行任何更改之前声明。例如:

var A = {};
var B = {};
var C = combine(A, B);

A.a=1;
B.b=2;

console.log(C);
// { a:1, b:2 }

【问题讨论】:

  • 嗯.. 更新后的问题以及未来——这不会发生。如果您将自己限制在少数受限制的属性名称上,您可以通过创建订阅者/发布者模式来玩游戏,然后使用 ES5 的 getter/setter 来推出更改——但是该死。没有。
  • 不是重复的——这是要求动态更新。

标签: javascript pointers object data-structures reference


【解决方案1】:

C 必须是一个函数:

function extend(obj) {
    if (typeof obj !== 'object') return obj;
    Array.prototype.slice.call(arguments, 1).forEach(function (source) {
        for (var prop in source) {
            obj[prop] = source[prop];
        }
    });
    return obj;
};

var A = {};
var B = {};
var C = function () {
    var _c = {};
    return extend(_c, A, B);
};

然后像这样调用C:

A.a=1;
B.b=2;

console.log(C());
// { a:1, b:2 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2015-01-19
    相关资源
    最近更新 更多