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 相关文章推荐
云网广告中的代码,提示出错,大家找找
Nov 21 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
Oct 15 Javascript
javascript使用定时函数实现跳转到某个页面
Dec 25 Javascript
jquery实现多屏多图焦点图切换特效的方法
May 04 Javascript
优化RequireJS项目的相关技巧总结
Jul 01 Javascript
Angularjs 依赖压缩及自定义过滤器写法
Feb 04 Javascript
详解layui中的树形关于取值传值问题
Jan 16 Javascript
详解Javascript中new()到底做了些什么?
Mar 29 Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
Dec 25 Javascript
浅谈vue.watch的触发条件是什么
Nov 07 Javascript
ant design charts 获取后端接口数据展示
May 25 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分页类的代码
2011/05/18 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
python烟花效果的代码实例
2020/02/25 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
python3代码中实现加法重载的实例
2020/12/03 Python
华润集团网上药店:健一网
2016/09/19 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
检举信的格式及范文
2014/04/04 职场文书
2014年党员加强作风建设思想汇报
2014/09/15 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
追悼词范文大全
2015/06/23 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
导游词之阆中古城
2019/12/23 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
超级详细实用的pycharm常用快捷键
2021/05/12 Python