JavaScript中的透明分层数据框架

时间:2013-09-29 14:35:41

标签: javascript

不确定术语。

我有一个带有一些数据的JavaScript“对象”:

var parent = { foo: 42, bar: 2.71, baz: 3.14 };

我需要创建另一个JavaScript对象,该对象将提供对父对象的访问,同时支持父条目的本地覆盖:

var child = extend(parent, { foo: 1, quo: 2 });

child.bar = 3;
parent.qux = 4;

assert(parent.foo === 42);
assert(child.foo === 1);

assert(parent.bar === 2.71);
assert(child.bar === 3);

assert(parent.baz === 3.14);
assert(child.baz === 3.14);

assert(parent.quo === undefined);
assert(child.quo === 2);

assert(parent.qux === 4);
assert(child.qux === 4);

// NB: I don't care about iteration on these objects.

我需要解决方案尽可能低开销,同时足够跨浏览器。将父值复制到子项是太多开销。

也就是说,我正在寻找类似于Lua metatable链的东西,但是在JavaScript中。

我正在阅读[[Prototype]]链。它看起来像是要走的路,但我还没有弄清楚在这里使用它们的轻量级方法。 (__proto__,据我所知,它不足以跨浏览器。)

任何线索?

1 个答案:

答案 0 :(得分:0)

通过将初始化程序删除到子对象,我能够想出这个(更新,感谢@FelixKling):

var wrap = function(parent) 
{
  var child = function() { };
  child.prototype = parent;
  return new child();
}

可以进一步改进吗?

这是一个JSFiddle:http://jsfiddle.net/b5Q4n/2/

请注意,正如评论中所建议的那样,有一个JS函数,可以完成所需的工作:Object.createhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create