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 相关文章推荐
如何用javascript去掉字符串里的所有空格
Feb 08 Javascript
NiftyCube——轻松实现圆角边框
Feb 20 Javascript
解决jquery的.animate()函数在IE6下的问题
Dec 03 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
Apr 14 Javascript
jQuery .tmpl() 用法示例介绍
Aug 21 Javascript
高效利用Angular中内置服务$http、$location等
Mar 22 Javascript
JS实现的随机排序功能算法示例
Jun 09 Javascript
总结js函数相关知识点
Feb 27 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
Feb 08 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
Apr 24 Javascript
详解Vue 项目中的几个实用组件(ts)
Oct 29 Javascript
vue2实现provide inject传递响应式
May 21 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
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
php中存储用户ID和密码到mysql数据库的方法
2013/02/06 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
Laravel 5.5 异常处理 & 错误日志的解决
2019/10/17 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
Javascript面向对象编程
2012/03/18 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
Python入门教程之运算符与控制流
2016/08/17 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
致垒球运动员加油稿
2014/02/16 职场文书
爸爸的花儿落了教学反思
2014/02/20 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
Python MNIST手写体识别详解与试练
2021/11/07 Python
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL