首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ES6中,我如何连接原型链?

在ES6中,我如何连接原型链?
EN

Stack Overflow用户
提问于 2018-03-07 10:33:49
回答 1查看 121关注 0票数 0

如果我有这个密码:

代码语言:javascript
运行
复制
class Z           { foo () {return 'from Z';} }

class A           { foo () {return 'from A';} }
class B extends A { }
class C extends B { }

var c = new C();

我知道我可以这样得到原型链:

代码语言:javascript
运行
复制
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 {}之间的原型链中,使相同的脚本输出以下内容?

代码语言:javascript
运行
复制
// from Z
// C {}
// B {}
// Z {}
// A {}
// {}

更新

为了澄清,我想更新原型链,以便新的C实例可以利用Z的.foo()方法。

更新2

好,我可以接受这是不可能的。如何将Z的特定实例连接到特定C实例的原型链中?

EN

回答 1

Stack Overflow用户

发布于 2018-03-07 10:59:54

我想更新原型链,以便C的新实例可以利用Z

这不可能。如果您想插入Z作为B的原型,那么从B继承的所有东西都将获得Z属性。这包括所有的B和旧的C实例。

为了区分它们而不影响旧的实例,您需要创建一个全新的BC

如果你还想做这件事,下面是怎么做的:

代码语言:javascript
运行
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49149736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档