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 必知必会之closure
Sep 21 Javascript
extjs 学习笔记 四 带分页的grid
Oct 20 Javascript
jQuery EasyUI 的EasyLoader功能介绍
Sep 12 Javascript
js添加table的行和列 具体实现方法
Jul 22 Javascript
原始XMLHttpRequest方法详情回顾
Nov 28 Javascript
CSS中position属性之fixed实现div居中
Dec 14 Javascript
Position属性之relative用法
Dec 14 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
Jun 09 Javascript
JS中sort函数排序用法实例分析
Jun 16 Javascript
JS实现购物车特效
Feb 02 Javascript
JavaScript制作3D旋转相册
Aug 02 Javascript
深入讲解Vue中父子组件通信与事件触发
Mar 22 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
建立文件交换功能的脚本(一)
2006/10/09 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
php实现websocket实时消息推送
2018/03/30 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
查看大图功能代码jquery版
2013/11/05 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
一起深入理解js中的事件对象
2021/02/06 Javascript
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
python socket 超时设置 errno 10054
2014/07/01 Python
web.py中调用文件夹内模板的方法
2014/08/26 Python
详解python之配置日志的几种方式
2017/05/22 Python
python求最大值最小值方法总结
2019/06/25 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
家长建议怎么写
2014/05/15 职场文书
校庆标语集锦
2014/06/25 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
普宁寺导游词
2015/02/04 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
开学典礼校长致辞
2015/07/29 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
高中英语教学反思范文
2016/03/02 职场文书
python如何获取网络数据
2021/04/11 Python