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,但不是一般的.我仍然欣赏一个更通用的解决方案.