是否有与goog.object.extend相同的纯函数?

时间:2015-04-07 21:18:07

标签: javascript functional-programming google-closure-library

Closure documentation

  

使用另一个对象扩展对象。这是“就地”运作;它不会创建新的Object。示例:var o = {}; goog.object.extend(o,{a:0,b:1}); O; // {a:0,b:1} goog.object.extend(o,{b:2,c:3}); O; // {a:0,b:2,c:3}

但这不是一种功能性方法,在许多情况下,功能性方法更好。 Closure是否为此提供了更现代的东西?

e.g。

goog.object.extend(a, b);

变为

a = goog.object.extend(a, b);

2 个答案:

答案 0 :(得分:4)

您可以使用要与要复制合并的对象一起扩展的空对象文字来创建新对象:

var x = {};
goog.object.extend(x, a, b);
a = x;

如果要扩展非普通对象,则可能需要使用Object.create(Object.getPrototypeOf(a))

答案 1 :(得分:0)

您可以自己实施:

var a = {};
var b = extend(a, { a: 0, b: 1 });
var c = extend(b, { b: 2, c: 3 });

console.log(a, b, c);

function extend(a, b) {
    var result = {};
    for (var x in a) if (a.hasOwnProperty(x)) result[x] = a[x];
    for (var x in b) if (b.hasOwnProperty(x)) result[x] = b[x];
    return result;
}

希望有所帮助。