【问题标题】:JavaScript ES6 in super function stop sub functionJavaScript ES6 中的超级函数停止子函数
【发布时间】:2020-03-21 02:41:49
【问题描述】:

所以我想知道这是否可能。我希望 super() 函数阻止 sub() 继续。

class Parent(){
   foo(){
        //Stop command that stops the code here.
   }
}

class Child extends Parent{
   foo(){
        super().foo();
        //this code should not run
   }
}

我知道我可以让父母返回 false 并对其进行测试,但是我所有的孩子都必须对其进行测试。使用继承的原因之一是将通用代码移至父级。我认为这是不可能的(甚至不建议这样做),但我只是想知道。

【问题讨论】:

  • 抛出异常?
  • 如果将 Child 逻辑作为参数传递给 Parent 会怎样?然后您可以在父类内部进行检查并确定是否/何时运行子代码?示例:foo(func) => { ... }super.foo(() => { ..child logic..}); 一样调用
  • 请指定您的用例。如果您想停止执行错误,只需抛出异常就可以了。否则,您可能使用了错误的编码模式。

标签: javascript inheritance ecmascript-6


【解决方案1】:

为什么不使用 __proto__

调用直接父类方法
class Parent{
   foo(){
        //Stop command that stops the code here.
   }
}

class Child extends Parent{
   foo(){
        super.foo();
        //this code should not run
   }
}

var c = new Child();
c.__proto__.__proto__.foo();

【讨论】:

  • a) 因为 __proto__ 已被弃用 b) 因为它不会调用 c 实例上的方法
猜你喜欢
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多