这是一个丑陋的Javascript,如果能找到解决方法会很好。
Javascript 没有类,这是一件好事。但是它以一种相当丑陋的方式实现了对象之间的回退。基本构造应该是拥有一个对象,当无法找到某个属性时,它会退回到另一个对象。
因此,如果我们想a
退回到b
我们想要做的事情:
a = {sun:1};
b = {dock:2};
a.__fallback__ = b;
然后
a.dock == 2;
但是,Javascript 提供了一个new
运算符和prototypes
. 所以我们做的远不那么优雅:
function A(sun) {
this.sun = sun;
};
A.prototype.dock = 2;
a = new A(1);
a.dock == 2;
但是除了优雅之外,这也没有那么强大,因为这意味着用 A 创建的任何东西都会得到相同的后备对象。
我想做的是将 Javascript 从这种人为的限制中解放出来,并能够为任何单个对象提供任何其他单个对象作为其后备。这样我可以在有意义的时候保持当前的行为,但在有意义的时候使用对象级继承。
我最初的方法是创建一个虚拟构造函数:
function setFallback(from_obj, to_obj) {
from_obj.constructor = function () {};
from_obj.constructor.prototype = to_obj;
}
a = {sun:1};
b = {dock:2};
setFallback(a, b);
但不幸的是:
a.dock == undefined;
任何想法为什么这不起作用,或任何解决方案的实施setFallback
?
(我通过 node.js 在 V8 上运行,以防这取决于平台)
编辑:
我在下面发布了一个部分解决方案,适用于 V8,但不是通用的。我仍然希望有一个更通用的解决方案。