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',它不是从父对象继承的*/}