【发布时间】:2017-07-27 11:32:07
【问题描述】:
我尝试用另一个类扩展一个类,该类的构造函数被覆盖,但是当我实例化这个类时,它没有自己的方法,但有自己的属性。
这是一个不能正常工作的例子:
class A {
constructor () {
return {
pi: 3.14
}
}
}
class B extends A {
constructor () {
super();
this.c = 10;
}
d () {}
}
let b = new B();
console.log(b);
这里,b 是:
Object {
c:10,
pi:3.14
}
那么为什么缺少 'd' 方法呢?
编辑:
这是一个具体的案例:
我需要用 HTMLElement 扩展一个类,我可以像 html 元素一样实例化和使用它,而无需注册 document.registerElement。
我的代码是:
class Element{
constructor(){
return document.createElement('div');
}
}
class Editor extends Element{
constructor(){
super();
}
}
我想像这样使用我的课程:
let editor = new Editor();
document.querySelector('body').appendChild(editor);
【问题讨论】:
-
因为您从 A 的构造函数返回自定义对象,只需将
return更改为this.pi = 3.14 -
当然,但这只是一个例子。在这种情况下,我真的需要返回一个对象。我的班级需要扩展一个不可扩展的对象。所以这是我找到的唯一解决方案。
-
当然,那么我想最好描述一下你的具体情况,而不仅仅是抽象的例子。发生这种情况是因为首先创建了具有
d()方法的对象,但随后它丢失了,因为您返回了具有pi属性的新对象。 -
我已经用我的代码编辑了我的帖子。
-
说实话,我更喜欢聚合而不是继承。
标签: javascript class extends