首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript覆盖从非ES6类到ES6类

JavaScript覆盖从非ES6类到ES6类
EN

Stack Overflow用户
提问于 2018-12-18 11:35:56
回答 1查看 366关注 0票数 7

在我的Webapp中,我需要实现一个API,它不包含任何ES6类定义,但是我想扩展其中一个类并覆盖一些方法。重写不能正常工作..。

代码语言:javascript
复制
function A() {
  this.msg = function() {
    console.log("A");
  }
}

class B {
  constructor() {
    A.call(this);
  }

  msg() {
    console.log("B");
  }
}

new B().msg();

我希望结果是"B“,但是执行"class”A的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-18 11:41:15

问题是,在A中,msg函数在构造函数中附加到this,也就是说,msg属性直接附加到实例对象本身,而不是在原型上。相反,msg of B位于B的原型上,即实例继承的对象B.prototype上。

一种选择是在msg的构造函数中覆盖B

代码语言:javascript
复制
function A() {
  this.msg = function() {
    console.log("A");
  }
}

class B {
  constructor() {
    A.call(this);
    this.msg = () => {
      console.log('b');
    }
  }
}

new B().msg();

一个更好的原型解决方案是B扩展A,如果这是您可以做的修改:

代码语言:javascript
复制
function A() {
  // empty constructor
}
A.prototype.msg = function() {
  console.log("A");
}

class B extends A {
  msg() {
    console.log('b');
  }
}

new B().msg();

(使用此方法,内部原型链类似于:A.prototype -> B.prototype -> instance,因此从实例中,B.prototype.msg优先于A.prototype.msg)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53832174

复制
相关文章

相似问题

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