【问题标题】:es6 methods inside and outside constructor - knockout构造函数内外的 es6 方法 - 淘汰赛
【发布时间】:2017-03-08 23:28:06
【问题描述】:

给定 es6 中的以下类:

class Test {
  constructor() {
    this.foo = () => console.log('Hello World');
  }

  bar() {
    console.log('Hello World')
  }
}

foo 和 bar 有什么区别?我可以通过这个(this.foo,this.bar)调用两者。但是,如果我在 knockoutJS 中使用此语法,则 Knockout 无法找到 bar()。

class Test2 {
  constructor() {
    this.foo = () => this.foo(); // endless loop
  }

  foo() {
    console.log('Hello World')
  }
}

我不知道这是否有意义,但我想拥有您在Test2 中看到的内容。主要是,我想将覆盖功能添加到我的淘汰赛应用程序中。如果我从Test1 扩展并覆盖foo,我将无法调用super.foo()。

我的目标是启用类继承,同时允许覆盖专门分配给“this”的函数(例如附加/处置)。

编辑:作为一种解决方法,我可以这样处理:

class Test3 {
  constructor() {
    this.foo = () => _foo();
  }

  _foo() {
    console.log('Hello World')
  }
}

这将允许我在淘汰赛中使用 foo 并且仍然能够使用 _foo 覆盖它。

【问题讨论】:

  • 在没有this 的情况下调用foo() 或_foo() 将始终是引用错误,而不是无限循环
  • 对不起,我的意思是说 'this.foo()' - 编辑了它

标签: javascript knockout.js ecmascript-6


【解决方案1】:

foo 和 bar 有什么区别?

见Use of 'prototype' vs. 'this' in JavaScript?

如果我在 knockoutJS 中使用此语法,则 Knockout 无法找到 bar()

看起来 Knockout 没有跟上语言发展的步伐。在classes 上定义的方法是不可枚举的。请参阅ES6 Iterate over class methods 了解如何访问它们。

我的目标是启用类继承,同时允许覆盖专门分配给“this”的函数(例如附加/处置)。

你总是可以this.foo = this.foo.bind(this);。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-17
    • 2010-10-10
    • 2015-10-12
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2019-06-18
    相关资源
    最近更新 更多