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 相关文章推荐
YUI 读码日记之 YAHOO.util.Dom - Part.1
Mar 22 Javascript
javascript里模拟sleep(两种实现方式)
Jan 25 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
Jun 16 Javascript
详解JavaScript函数对象
Nov 15 Javascript
JavaScript入门系列之知识点总结
Mar 24 Javascript
javascript中的后退和刷新实现方法
Nov 10 Javascript
jQuery实现的购物车物品数量加减功能代码
Nov 16 Javascript
jQuery插件zTree实现获取一级节点数据的方法
Mar 08 Javascript
vue实现自定义多选与单选的答题功能
Jul 05 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
Oct 24 Javascript
微信小程序如何刷新当前界面的实现方法
Jun 07 Javascript
使用apifm-wxapi快速开发小程序过程详解
Aug 05 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
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
JS中数组重排序方法
2016/11/11 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
vue的一个分页组件的示例代码
2017/12/25 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
从django的中间件直接返回请求的方法
2018/05/30 Python
Python subprocess模块常见用法分析
2018/06/12 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
VELTRA台湾:世界自由行专家
2017/08/15 全球购物
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
数控专业毕业生求职信范文
2013/09/21 职场文书
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
迎新晚会主持词
2014/03/24 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
初一年级组工作总结
2015/08/12 职场文书
Mysql 一主多从的部署
2022/05/20 MySQL