js继承封装(二)
来源:互联网 发布:linux常用命令面试题 编辑:程序博客网 时间:2024/05/21 10:34
上一章讲到用call结合原型继承方式来实现继承:
//定义一个修改command函数function UpdateCommand(path) { this.name="修改命令"; this.path = path; }UpdateCommand.prototype.execute = function () { alert("发送请求2");}//定义一个查询command函数function QueryCommand(path) { UpdateCommand.call(this,path);}QueryCommand.prototype=new UpdateCommand();var queryCommand = new QueryCommand("/test.jsp");queryCommand.execute();//输出了【发送请求2】alert(queryCommand.name);//输出了【修改命令】
现在如果我对queryCommand 进行方法重载,会是啥结果呢:
QueryCommand.prototype.execute=function(){ alert("发送查询请求");}QueryCommand.prototype=new UpdateCommand();var queryCommand = new QueryCommand("/test.jsp");queryCommand.execute();//输出结果是【发送请求2】 并没有输出 【发送查询请求】
但如果我们把这俩句话
QueryCommand.prototype.execute=function(){ alert("发送查询请求");}QueryCommand.prototype=new UpdateCommand();
执行顺序变更下呢?
QueryCommand.prototype=new UpdateCommand();QueryCommand.prototype.execute=function(){ alert("发送查询请求");} var queryCommand = new QueryCommand("/test.jsp");queryCommand.execute();//输出结果是【发送查询请求】 并没有输出 【发送请求2】
从这可以看出,我们在写方法重载的时候一定要注意到代码的顺序,如果顺序不对的话,执行结果会出乎意料
为了进步验证,执行下面的代码
//定义一个查询command函数function QueryCommand(path) { UpdateCommand.call(this,path);}QueryCommand.prototype.execute=function(){ alert("发送查询请求");}var queryCommand = new QueryCommand("/test.jsp");alert(queryCommand.constructor ===QueryCommand); //输出结果为true
如果实现原型继承后的执行结果
function QueryCommand(path) { UpdateCommand.call(this,path);}QueryCommand.prototype.execute=function(){ alert("发送查询请求");}QueryCommand.prototype=new UpdateCommand();var queryCommand = new QueryCommand("/test.jsp");alert(queryCommand.constructor ===QueryCommand); //输出结果为false
从上面分析可以看出,采用以上的继承方式来实现存在以下毛病:
- 在创建queryCommand构造函数和原型(以后简称类)时,就对UpdateCommand进行了实例化,这是不合适的。
- 方法重载需要考虑代码顺序,容易出错
- 实现中有constructor属性的指向错误
js继承封装(三)讲解解决方法
0 0
- js继承封装(二)
- js继承封装(一)
- js继承封装(三)
- 面向对象封装,继承,多态(二)
- JS继承 封装函数
- JS封装,对象继承
- JS- 封装、继承、多态
- JS- 封装、继承、多态
- JS封装继承函数
- js中继承的封装
- js--原型、封装和继承
- (二)面向对象之封装,继承,多态(上)
- JAVA菜鸟(二)面向对象之封装,继承,多态
- Object-C详细编程(二)—封装,继承,多态
- Java学习笔记(二)——封装、继承、多态
- 理解继承(一):JS面向对象编程(封装)
- JS面向对象基础篇(封装 继承 多态)
- JS面向对象(二)—继承
- day12,day13
- linux常见压缩命令
- 最大流邻接表spa
- 九度OJ 1251:序列分割 (DFS)
- Delphi XE 如何实现("再按一次退出") 然后退出程序
- js继承封装(二)
- Android中ImageView.ScaleType属性值
- 九度OJ 1252:回文子串 (字符串处理、DP)
- VMWare虚拟机下为Ubuntu 14.04.1配置静态IP(NAT方式)
- osg的fov解释
- ssh免密码设置
- 第十七天
- 第十八天(待编辑状态)
- 一个 “五阶幻方” 的标准画法