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 相关文章推荐
js删除所有的cookie的代码
Nov 25 Javascript
js中把JSON字符串转换成JSON对象最好的方法
Mar 21 Javascript
ext中store.load跟store.reload的区别示例介绍
Jun 17 Javascript
JavaScript实现关键字高亮功能
Nov 12 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
Jan 19 Javascript
Vue实现双向数据绑定
May 03 Javascript
浅谈vue首屏加载优化
Jun 28 Javascript
Node.js 进程平滑离场剖析小结
Jan 24 Javascript
JS学习笔记之数组去重实现方法小结
May 29 Javascript
vue指令v-html使用过滤器filters功能实例
Oct 25 Javascript
微信小程序实现时间进度条功能
Nov 17 Javascript
微信小程序收藏功能的实现代码
Jun 19 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
如何使用脚本模仿登陆过程
2006/11/22 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
PHP解决中文乱码
2017/04/28 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
Vue数字输入框组件使用方法详解
2020/02/10 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Flask框架钩子函数功能与用法分析
2019/08/02 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
新闻编辑自荐信
2013/11/03 职场文书
教师自我反思材料
2014/02/14 职场文书
投资协议书范本
2014/04/21 职场文书
高中生班主任评语
2014/04/25 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
民用住房租房协议书
2014/10/29 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android