【问题标题】:How to call super/base methods in JavaScript? [duplicate]如何在 JavaScript 中调用超级/基本方法? [复制]
【发布时间】:2014-04-17 10:51:25
【问题描述】:

我必须在 Javascript 中实现以下代码,但在 javascript 中找不到 super.say() 的等价物。这个怎么翻译?

class Foo {
    public void say() {
      System.out.println("foo");  
    }
}


class Bar extends Foo {

    static int counter = 0;

    public void say() {
        super.say();
        counter++;
        System.out.println("bar " + counter); 
    }
}

【问题讨论】:

  • 我可能会在没有“类”概念的情况下重写它;惯用的 JavaScript 方法不一定是惯用的“Java OOP”方法。

标签: javascript super


【解决方案1】:

有一篇文章详细描述:http://joshgertzen.com/object-oriented-super-class-method-calling-with-javascript/

基本上,您需要存储对基本方法的引用,然后在“派生”(也许“阴影”在这里可能是一个更好的词)方法中调用它。

【讨论】:

    【解决方案2】:

    关键字super 在Javascript 中不像在Java 中那样工作,因为没有类的概念。没有类,就不能有后代,因此super 在这种情况下毫无用处。

    您可以实现类似super 的东西,如here 所述。

    【讨论】:

    • 这不是一个公平的结论(没有super 关键字是正确的,但否则它似乎不切线)。传统的“OOP”类可以通过原型继承在 JavaScript 中完全模拟;虚拟、超级和非虚拟方法也是如此。
    • @user2864740 我没有说你做不到,我说 JS 没有类的概念。您完全可以在 JS 中实现类似于 super 的东西,而不是 OP 正在寻找的方式。
    • 那么,回到问题“如何在javascript中实现super”?
    • 如果一个人“不能有后代”,那么 [[prototype]] 是如何工作的?或者instanceof 是如何工作的? super 的问题略有不同,这是因为 JavaScript 不允许机制直接跳过 [[prototype]] 链中的“MRO”(和虚拟成员)。
    • 下面是对后代声明的一个简单反例:a = function () {}; b = function () {}; b.prototype = new a; (new b) instanceof a 结果为真。
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 2015-07-15
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    相关资源
    最近更新 更多