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 相关文章推荐
JS实现打开本地文件或文件夹
Mar 09 Javascript
js编码、解码函数介绍及其使用示例
Sep 05 Javascript
Node.js中require的工作原理浅析
Jun 24 Javascript
jQuery中replaceAll()方法用法实例
Jan 16 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
Feb 13 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
Jun 11 Javascript
JavaScript实现的多种鼠标拖放效果
Nov 03 Javascript
js 提交form表单和设置form表单请求路径的实现方法
Oct 25 Javascript
Canvas实现动态的雪花效果
Feb 13 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
Jun 29 Javascript
详解Angular如何正确的操作DOM
Jul 06 Javascript
微信小程序实现一个简单swiper代码实例
Dec 30 Javascript
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
linux php mysql数据库备份实现代码
2009/03/10 PHP
Joomla开启SEF的方法
2016/05/04 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
用JS写的一个TableView控件代码
2010/01/23 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
DWZ刷新dialog解决方法
2013/03/03 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
简单解析Django框架中的表单验证
2015/07/17 Python
Fabric 应用案例
2016/08/28 Python
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
写给女朋友的道歉信
2014/01/12 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
学习心理学的体会
2014/11/07 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
2015年调度员工作总结
2015/04/30 职场文书
团组织关系介绍信
2019/06/24 职场文书
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS