javascript - JavaScript 中的原型(prototype)继承...我可以调用 "super"等价物吗?

标签 javascript inheritance prototype

我正在使用原型(prototype)继承在 javascript 中构建一个面向对象的库。与 Java 和 .NET 类似,我的所有对象/原型(prototype)都将继承“Object”对象/原型(prototype)。我想知道是否可以从派生的调用 super 对象/原型(prototype)函数?

考虑以下代码示例:

function Object() {
    this.DoAction = function() {
    };
};

function CustomObject() {
    this.DoAction = function() {
        super.DoAction();    //How do I do this in JavaScript?
    };
};

最佳答案

JavaScript 没有 super 的直接等价物。

解决方法可能是在覆盖原型(prototype)之前将方法保存在原型(prototype)上,例如:

function CustomObject() {
    this._super_DoAction = this.DoAction;
    this.DoAction = function() {
        this._super_DoAction(); 
    };
};

如果你会使用ES5特性,你可以使用Object.getPrototypeOf从原型(prototype)中获取方法,然后apply用当前对象执行作为这个:

function CustomObject(){
    this.DoAction=function() {
        Object.getPrototypeOf(this).DoAction.apply(this, []);
    };
}

关于javascript - JavaScript 中的原型(prototype)继承...我可以调用 "super"等价物吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11977718/

相关文章:

javascript - 如何在 Canvas 上绘制线条 JS 动画

javascript - 如何在更改事件时获取 jquery 中文本框的先前值

javascript - 迭代一个包含内容但长度为 0 的数组

html - 如何删除内联 CSS 元素样式(不使用 JavaScript)?

java - 具有 jackson 序列化/反序列化的多级多态树

inheritance - 我可以避免为派生自接口(interface)的类编写样板代码吗?

javascript - 使用窗口原型(prototype)覆盖所有窗口的 window.print() ?

javascript - 将敏感数据存储在 Local Stoarge 或 session 存储中是否安全? Localstorage 允许对敏感数据进行任何攻击

javascript - 当子类扩展父类(super class)时,为什么要重置对象构造函数?

javascript - 更新原型(prototype)变量Javascript