Javascript玩转继承(三)


Posted in Javascript onMay 08, 2014

首先,我们来看非主流继承一:实例继承法。

我也不说那么多废话了,既然是非主流继承,就一定不常用,既然不常用还存在,那就只有一个因素,他用于特定的场合。实例继承法,就主要用于核心对象的继承,也是目前为止唯一能够解决核心对象继承的方式。

核心对象的继承拥有一定的价值,比如说Error对象,我们公司可能要自己实现一个Error 类来简化今后的开发,那么这个时候我就要使用实例继承法来继承Error。

代码如下:

function ExtendingError(mes)
{
    var instance=new Error(mes);
    instance.NewError=function(){
        alert("Your Error is "+mes);    
    }
    return instance;
}

好,测试下:

var e=new ExtendingError("Your number is less than one");
e.NewError();
alert(e.toString());

结果让我们满意:
Javascript玩转继承(三)

Javascript玩转继承(三)

好,废话不多说,这个是非主流继承方式,基本只用于核心对象的继承,记住就好!
接下来看看非主流继承二:拷贝继承法.

顾名思义,拷贝继承,就是通过拷贝实现对象的继承,拷贝什么呢?很明显,就是对象的属性和方法,还记得Javascript中,类其实就一个Hashtable么?如果想不起来的话,就回去复习一下基础,我可能会在过一段时间写一篇关于Javascript对象的知识。
了解了这个就好办了,直接看代码:
首先写一个Extend方法:

Function.prototype.Extend=function(){
    for(var pro in obj)
    {
        //这样其实就是把父类的属性和方法完全复制过去了
        this.prototype[pro]=obj[pro];
}
}

好了,再写段代码看下如何使用:

function Animal()
{    }
function People()
{    }
People.Extend(new Animal())
{    }

明眼人一眼看出来,这个方法的缺点太明显了:
将对象的属性方法一一复制的时候,其实用的是反射,反射对效率的损伤我就不多说了。
和原型继承一样,必须初始化父类对象,当确定继承关系时,但是参数还不确定时,玩不转!

总之,这个方法一般情况下不用。

好了,下面说个常用的东西。混合继承!
这个是基于两个主流继承方式的。对比两个继承方式,我们可以发现两个继承方式的优缺点是互补的,那就好办了,混合到一起吧!

function People(name)
{
    this.name=name;
    this.SayName=function(){
        alert("My name is "+name);
}
}
function Girl(name,age)
{
    //构造继承
    this.father=People;
    this.father(name);
    delete this.father;
    this.Introduce=function(){
        alert("My name is "+name+".I am"+age);
}
}
//原型继承
Girl.prototype=new People();
好了,两种方式的混合,现在看看,是不是问题解决了呢?
var g=new Girl("Xuan",22);
alert(g instanceof People);
g.SayName();
g.Introduce();

Javascript玩转继承(三)

Javascript玩转继承(三)

Javascript玩转继承(三)

测试通过!

这是一个相对完美的解决方案,但是却增加了代码的复杂度,所以具体的方案还要靠大家在实践中去选择。

Javascript玩转继承的方式就这些,欢迎大家继续关注我的其他文章。 

Javascript 相关文章推荐
浅析用prototype定义自己的方法
Nov 14 Javascript
用jquery中插件dialog实现弹框效果实例代码
Nov 15 Javascript
JS数组的赋值介绍
Mar 10 Javascript
js实现checkbox全选和反选示例
May 01 Javascript
javascript 动态修改css样式方法汇总(四种方法)
Aug 27 Javascript
javascript下拉列表中显示树形菜单的实现方法
Nov 17 Javascript
详解Node.js中的事件机制
Sep 22 Javascript
详解基于webpack2.x的vue2.x的多页面站点
Aug 21 Javascript
使用Vue-Router 2实现路由功能实例详解
Nov 14 Javascript
vue实现树形菜单效果
Mar 19 Javascript
浅谈vue异步数据影响页面渲染
Oct 29 Javascript
详解Vue的列表渲染
Nov 20 Vue.js
Javascript玩转继承(二)
May 08 #Javascript
js的Prototype属性解释及常用方法
May 08 #Javascript
Javascript玩转继承(一)
May 08 #Javascript
玩转方法:call和apply
May 08 #Javascript
jQuery产品间断向下滚动效果核心代码
May 08 #Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
May 08 #Javascript
jquery通过visible来判断标签是否显示或隐藏
May 08 #Javascript
You might like
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
document.documentElement && document.documentElement.scrollTop
2007/12/01 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
python求质数列表的例子
2019/11/24 Python
Python计算IV值的示例讲解
2020/02/28 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
同程旅游英文网站:LY.com
2018/11/13 全球购物
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
中学生学习生活的自我评价
2013/10/26 职场文书
信息系统专业个人求职信范文
2013/12/07 职场文书
开办化妆品公司创业计划书
2013/12/26 职场文书
培训演讲稿范文
2014/01/12 职场文书
元宵晚会主持词
2014/03/25 职场文书
2014年村委会工作总结
2014/11/24 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
Nginx 匹配方式
2022/05/15 Servers