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 相关文章推荐
IE浏览器中图片onload事件无效的解决方法
Apr 29 Javascript
JavaScript获取文本框内选中文本的方法
Feb 20 Javascript
JavaScript中Cookies的相关使用教程
Jun 04 Javascript
详解jQuery中的deferred对象的使用(一)
May 27 Javascript
微信小程序 实现tabs选项卡效果实例代码
Oct 31 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
Nov 22 Javascript
微信小程序自定义导航隐藏和显示功能
Jun 13 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
Jun 20 jQuery
Vue使用枚举类型实现HTML下拉框步骤详解
Feb 05 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
Oct 20 Javascript
vue中轮训器的使用
Jan 27 Javascript
Layui弹出层 加载 做编辑页面的方法
Sep 16 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网站基础优化方法小结
2008/09/29 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
document.documentElement && document.documentElement.scrollTop
2007/12/01 Javascript
js利用与或运算符优先级实现if else条件判断表达式
2010/04/15 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
移动端界面的适配
2017/01/11 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
python 动态加载的实现方法
2017/12/22 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
Python如何定义有默认参数的函数
2020/08/10 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
Python编写万花尺图案实例
2021/01/03 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
HTML5制作表格样式
2016/11/15 HTML / CSS
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
超市开店计划书
2014/09/15 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL