Javascript让对象相互依赖

Ian*_*Ian 2 javascript inheritance v8

这是一个丑陋的Javascript,很高兴找到一个解决方法.

Javascript没有类,这是一件好事.但它以一种相当丑陋的方式实现了对象之间的回退.基础构造应该有一个对象,当一个属性找不到时,它会回落到另一个对象.

因此,如果我们想要a回归,b我们会想做一些事情:

a = {sun:1};
b = {dock:2};
a.__fallback__ = b;
Run Code Online (Sandbox Code Playgroud)

然后

a.dock == 2;
Run Code Online (Sandbox Code Playgroud)

但是,Javascript代替了new运营商和prototypes.所以我们做得不那么优雅:

function A(sun) {
   this.sun = sun;
};
A.prototype.dock = 2;
a = new A(1);

a.dock == 2;
Run Code Online (Sandbox Code Playgroud)

但除了优雅之外,它的功能也严格不足,因为它意味着用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);
Run Code Online (Sandbox Code Playgroud)

但不幸的是:

a.dock == undefined;
Run Code Online (Sandbox Code Playgroud)

任何想法为什么这不起作用,或任何解决方案的实施setFallback

(我在V8上运行,通过node.js,以防这是依赖于平台的)


编辑:

我在下面发布了一个部分解决方案,适用于V8,但不是一般的.我仍然欣赏一个更通用的解决方案.

Jim*_*dra 5

你可以使用Object.create.它是ES5的一部分,因此它已经在某些浏览器中本地可用.我相信它完全符合你的要求.