【问题标题】:extended class, doesn't have its own methods扩展类,没有自己的方法
【发布时间】: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


【解决方案1】:

ECMAScript6 类方法是对象原型对象的方法。你会发现方法不在对象本身,而是在obj.__proto__

https://reinteractive.com/posts/235-es6-classes-and-javascript-prototypes

在这里,您可以看到并且可能了解原型对象内部发生的情况。是的,ES6 语法只是一种语法变化,而不是新技术。

【讨论】:

    猜你喜欢
    • 2022-12-14
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2018-06-03
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多