是否可以检测父方法是否被覆盖
Is it possible to detect if parent method is being overriden?
考虑这段代码:
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
继承,也可以这样做。
相关文章:
- 是否可以在加载Disqus线程后使用javascript覆盖Disqus 2012中的css
- 定义变量是否比在 JS 中覆盖变量使用更多的资源
- 是否可以覆盖SystemJS配置中的映射别名
- 是否可以检测父方法是否被覆盖
- 是否覆盖网站上文本输入区域的默认移动设备键盘?(HTML/JS/jQuery)
- jQuery是否覆盖事件侦听器
- 如何确定 document.write() 是否会覆盖页面,即当前脚本是否异步加载
- 使用实习生在功能上测试元素是否可见(没有元素覆盖)
- 是否可以覆盖本机 Es6 承诺解析方法
- SRC 是否覆盖写入的 JS
- 我用PHP调用的数据文件神秘地被更改了.用户是否覆盖了它
- AJAX请求是否覆盖另一个请求
- Icefaces 1.8是否覆盖window.onbeforeunload javascript事件
- 使用Jquery检查html元素是否覆盖了另一个不同z-index的元素
- CSS样式表的更改不会反映在Angular.js中.JS是否覆盖CSS ?
- 确定HTML元素是否覆盖了画布的一部分
- 可以'是否覆盖h1文本的默认边距
- InnerHTML是否覆盖以前的条目
- Javascript onclick 函数是否覆盖 if 语句
- jQuery $(window).resize()是否覆盖现有事件?