重写继承的原型方法并在新的方法中调用原始方法

bas*_*kum 6 javascript inheritance overriding prototype

在下面的一段代码中,我如何访问A.prototype.log内部B.prototype.log

function A() {}

A.prototype.log = function () {
    console.log("A");
};

function B() {}

B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;

B.prototype.log = function () {
    //call A.prototype.log here
    console.log("B");
};

var b = new B();
b.log();
Run Code Online (Sandbox Code Playgroud)

我知道我可以写,A.prototype.log.call(this)但我想也许有更优雅的方式,让我以相对的方式调用它,比如"调用原型链中下一个更高实例的方法'日志'".这样的事情可能吗?

Mor*_*ler 5

你可以用 Object.getPrototypeOf

...
B.prototype.log = function () {
    Object.getPrototypeOf (B.prototype).log.call(this)
    console.log("B");
};
...
b.log(); //A B
Run Code Online (Sandbox Code Playgroud)

注意:Object.getPrototypeOf是ECMASript 5,请参阅兼容性


也有非标准和弃用__proto__属性(兼容性),其

引用与其内部[[Prototype]]相同的对象

并允许你A像这样调用你的s'日志方法

B.prototype.__proto__.log.call(this)

首选方法是使用Object.getPrototypeOf.