是否可以检测父方法是否被覆盖

Is it possible to detect if parent method is being overriden?

本文关键字:是否 覆盖 方法 检测      更新时间:2023-09-26

考虑这段代码:

function Parent(){};
Parent.prototype.myMethod = function()
{
    return "hi!";
}
function Child(){};
Child.prototype = Object.create(new Parent());
var objChild = new Child();
//no override...
var output = objChild.myMethod();
alert(output); // "hi!"

//override and detect that in Parent.myMethod()
Child.prototype.myMethod = function()
{
    var output = Parent.prototype.myMethod.call(this);
    alert("override: " + output); // "hi!"    
};
objChild.myMethod();

是否可以确定Parent.myMethod()是"自然"调用还是通过"重写"调用,在这种情况下返回其他内容?

演示

是否可以确定Parent.myMethod()是"自然"调用还是通过"覆盖"调用

不是(不使用非标准的、不推荐使用的caller属性)。但是,您可以检测何时对具有不同myMethod属性的对象调用该方法:

this.myMethod === Parent.prototype.myMethod

在这种情况下,还什么?

你真的不应该。让它成为一个参数(但要注意),你期待其他东西,或者将功能划分为两种不同的方法。

在我看来,您没有重写该方法,通过将this传递到调用函数中,您可以像调用Child的函数一样调用该函数,即使您没有从Parent继承,也可以这样做。