Javascript 是否可以检测父方法是否被重写?

Javascript 是否可以检测父方法是否被重写?,javascript,object,javascript-objects,prototypal-inheritance,overriding,Javascript,Object,Javascript Objects,Prototypal Inheritance,Overriding,考虑这段代码: 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(outpu

考虑这段代码:

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()

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

this.myMethod === Parent.prototype.myMethod
如果是那样的话,你还需要别的东西吗


你真的不应该。将它设置为一个参数(),您可以期望其他内容,或者将功能划分为两种不同的方法。

在我看来,您不会通过将
传递到调用函数中来覆盖该方法,您可以像调用
子函数一样调用该函数,即使不是从
父对象继承,也可以这样做-哎哟!它应该是`Object.create(Parent.prototype)@伯吉:谢谢你的更正!我是原型继承的新手有真实的用例吗?如果是这样的话,可能会有设计问题。如果(孩子的这个实例)
呢?这似乎是一个设计问题,虽然。。。如果
Child#myMethod
需要做一些不同的事情,你就不能在那里做,忘记调用
Parent#myMethod
?如果他们都需要一些共同的功能,也许可以将其提取到父级中的新功能中?我如何进行检测?我没有完全理解你,对不起!只要
if(this.myMethod==Parent.prototype.myMethod){/*该'this'对象似乎没有被覆盖的版本*/},否则{/*'this'有一个'myMethod',它不是从父对象继承的*/}