如果我有这个密码:
class Z { foo () {return 'from Z';} }
class A { foo () {return 'from A';} }
class B extends A { }
class C extends B { }
var c = new C();
我知道我可以这样得到原型链:
consonle.log(c.foo());
var obj = c;
while(Object.getPrototypeOf(obj)) {
obj = Object.getPrototypeOf(obj);
console.log(obj);
}
// Puts out:
// from A
// C {}
// B {}
// A {}
// {}
如何将Z的实例插入到A {}
和B {}
之间的原型链中,使相同的脚本输出以下内容?
// from Z
// C {}
// B {}
// Z {}
// A {}
// {}
更新
为了澄清,我想更新原型链,以便新的C实例可以利用Z的.foo()
方法。
更新2
好,我可以接受这是不可能的。如何将Z的特定实例连接到特定C实例的原型链中?
发布于 2018-03-07 10:59:54
我想更新原型链,以便C的新实例可以利用Z
这不可能。如果您想插入Z
作为B
的原型,那么从B
继承的所有东西都将获得Z
属性。这包括所有的B
和旧的C
实例。
为了区分它们而不影响旧的实例,您需要创建一个全新的B
和C
。
如果你还想做这件事,下面是怎么做的:
class A { foo () {return 'from A';} }
class B extends A { }
class C extends B { }
// Oops, B should inherit from Z not A:
class Z extends A { foo () {return 'from Z';} }
Object.setPrototypeOf(B, Z);
Object.setPrototypeOf(B.prototype, Z.prototype);
var c = new C();
https://stackoverflow.com/questions/49149736
复制相似问题