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 相关文章推荐
setTimeout与setInterval在不同浏览器下的差异
Jan 24 Javascript
动态加载外部javascript文件的函数代码分享
Jul 28 Javascript
JavaScript中去掉数组中的重复值的实现方法
Aug 03 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
Apr 24 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
Jul 05 Javascript
jquery实现多行文字图片滚动效果示例代码
Oct 10 Javascript
JavaScript中定义函数的三种方法
Mar 12 Javascript
jquery实现右键菜单插件
Mar 29 Javascript
jQuery插件bxSlider实现响应式焦点图
Apr 12 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
Jun 28 Javascript
jQuery实现动态添加tr到table的方法
Dec 26 Javascript
微信小程序加载机制及运行机制图解
Nov 27 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
php取得字符串首字母的方法
2015/03/25 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
jQuery代码优化 遍历篇
2011/11/01 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
angularJS开发注意事项
2018/05/26 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
python 重命名轴索引的方法
2018/11/10 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
python with (as)语句实例详解
2020/02/04 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
煤矿机修工岗位职责
2014/02/07 职场文书
工作态度检讨书
2014/02/11 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
中职生求职信
2014/07/01 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
医德医风自我评价2015
2015/03/03 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL