2017-03-08 36 views
0

给出下面的类ES6:ES6方法内外构造 - 淘汰赛

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

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

是什么foo和酒吧之间的区别?我可以通过this调用这个(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”的函数(例如,attach/dispose)。

编辑:作为一种变通方法,我可以处理此类似:

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

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

这将让我在淘汰赛使用foo和仍然能够使用_foo来覆盖它。

+0

不带'this'调用'foo()'或'_foo()'将永远是一个引用错误,而不是无限循环 – Bergi

+0

对不起,我打算说'this.foo()' - 编辑它 – Frame91

回答

1

foo和bar有什么区别?

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

如果我在knockoutJS使用这个语法,淘汰赛是不是能找到巴()

貌似淘汰赛是不是最新的语言发展。在class es上定义的方法是不可枚举的。有关如何访问它们,请参阅ES6 Iterate over class methods

我的目标是使类的继承,同时允许重写被专门分配给功能“这个”(例如附接/处置)。

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