JavaScript 继承方式的实现
1、原型链继承
function superType(name){
this.name= 'milk';
}
super.prototype.sayName=function(){
console.log(this.name);
}
function subType (age){
this.age= 20;
}
subType.prototype=new superType();// 将原型对象等于另一个类型的实例
subType.prototype.getAge=function(){console.log(this.age)}
var instance = new subType();
// 缺点:由于原型链共享的本质所引起的:对于 引用类型的数据共享问题;引用类型 数据会被所有实例共享;并且在创建子类型实例时,不能向超类型的构造函数中传递参数(应该说是 没有办法在不影响所有对象实例的情况下,给超类型的构造函数传参) 2、借用构造函数 function superType(name){
this.name=name;
} fucntion subType(){
superType.call( this ,'milk');
} var instance= new subType(); // 缺点:方法都在构造函数中定义,因此无法进行函数复用;并且超类型原型中定义的方法对子类型而言也是不可见的; 3、组合继承: // 思想:通过借用构造函数来 实现实例属性的继承;使用 原型链实现原型属性和方法的继承 function superType(name){
thism.name=name;
}
superType.prototype.sayName=function(){
console.log(this.name);
} fucntion subType(name,age){
superType.call(this,name);
this.age=age;
} subType.prototype= new superType();
subType.prototype.constructor= subType;
subType.prototype.sayAge=function(){
console.log(this.age);
} var instance = new subType('milk',20); // 缺点 :效率较低,需要调用两次超类型构造函数 4、原型式继承 不必创建自定义类型,只需借助已有对象创建新对象即可;
function object(o){
function F(){};
F.prototype = o;
return new F();
}
ES5 新增了一个类似的函数: Object.create(obj,{});
第一个参数:用作新对象(new F() )原型的对象;
第二个参数:为新对象定义额外属性的对象;
// 应注意:包含引用类型值得属性始终都会共享相应的值; 5、寄生式继承
// 基于已有对象创建一个新对象,增强新对象能力,并将新对象返回; function creatAnther(original){
var clone= object(original);
clone.saySN=function(){
//do somethings
};
return clone;
} 6、寄生组合式继承
// 由于组合继承 会调用两次 超类型的构造函数,所以 采用 寄生组合式继承从而节省 第一次调用;
// 思想:借用构造函数来继承属性,通过原型链的混成形式来继承方法;
本质上:使用 寄生式继承来继承超类型原型,然后再将结果指定给子类型的原型; 用::
var prototype = object(superType.prototype);//创建超类型原型的副本;//相当于超类型的实例
prototype.constructor= subtype;// 弥补重写原型而丢失的constructor属性
subtype.prototype= prototype;// 将新创建的 对象复制给子类型的原型
替换::
subType.prototype= new superType();
subType.prototype.constructor= subType;
JavaScript 继承方式的实现的更多相关文章
- JavaScript继承方式详解
原文链接 : http://segmentfault.com/a/1190000002440502 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继 ...
- JavaScript继承方式详解[转]
js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于对象的,它没有类的概念.所以,要想实现 ...
- JavaScript 继承方式详解
js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承)类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于对象的,它没有类的概念.所以,要想实现继 ...
- JavaScript继承方式
我的上一篇随笔中写了有关原型继承的,下面介绍几种更加有用的. 借用构造函数 在解决原型中关于引用类型值所带来的问题,开发人员开始使用一种叫做借用构造函数. 基本思想: 在子类型构造函数的内部调用超类型 ...
- Javascript的四种继承方式
在Javascript中,所有开发者定义的类都可以作为基类,但出于安全性考虑,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击. 选定基类后,就可 ...
- JavaScript之四种继承方式讲解
在Javascript中,所有开发者定义的类都可以作为基类,但出于安全性考虑,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击. 选定基类后,就可 ...
- 总结javascript继承的两种方式的N中写法
最近翻看博客园,总结了一下javascript的继承方式:prototype和copy继承方式. 一.prototype方式 当一个函数被创建时,Function构造函数产生的函数会隐式的被赋予一个p ...
- JavaScript中的几种继承方式对比
转自:http://blog.csdn.net/kkkkkxiaofei/article/details/46474069 从’严格’意义上说,JavaScript并不是一门真正的面向对象语言.这种说 ...
- JavaScript各种继承方式和优缺点
好久没写博客啦,嘻嘻,这个月是2017年的最后一个月啦,大家应该都开始忙着写年终总结了吧,嘻嘻,小颖今天给大家分享下Javascript中的几种继承方式以及他们的优缺点. 1.借助构造函数实现继承 原 ...
随机推荐
- java对象转json应clone,避免生成json串有问题
今天因为一个java对象转json,搞了我一下午,在些记录一下: 是这样:我在strtuts2的action中调用services返回 Row: 26, 中国银行海鹰, 29, 东楼, 36, 1F ...
- Lining Up(在一条直线上的最大点数目,暴力)
Lining Up Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- .Net资源文件全球化
I:本博文代码示例效果图 好久没来写随笔了.不多说先上大饼! 跟着直接上 [代码下载地址] II:ASP.NET 资源文件介绍 在ASP.NET特殊文件夹内有那么两个不太引人注意,他们分别是App_ ...
- eclipse 各种版本spring插件安装
一.安装之前先得知道怎么下载吧: 一般网上找到的资料是到这里就GG了的 --> http://spring.io/tools/sts/all 很明显这点版本是不够我们需要的,假如我们的eclip ...
- 屏蔽错误:LNK2038
最近在使用Qt(VS2010编译)的过程中,需要调用COM库,在Qt中加入了QAxContainer模块,是一个LIB库,在把编译模式从Debug改为Release 后链接报告了一堆错误 -1: 错误 ...
- VB execl文件后台代码,基础语法
Excel宏与VBA 程序设计实验指导1 实验1 Excel宏与VBA 语法基础 一.实验目的 1.熟练掌握录制宏.执行宏.加载宏的方法: 2.熟练使用Excel VBA编辑环境,掌握VBA的编辑工具 ...
- DRBD脑裂解决方法
1.查看主服务器 [root@master ~]# /etc/init.d/drbd status drbd driver loaded OK; device status: version: (ap ...
- Linux 终端颜色高亮
昨天在改一些东西时,不小心将root下的一些配置文件删掉了.导致启动终端后,字完全一个颜色,没有区分.在网上找到的都是 改整体颜色的.但实际上这时应该搜Linux终端高亮才能找到解决办法.在这里再列出 ...
- digital root问题
问题阐述会是这样的: Given a non-negative integer num, repeatedly add all its digits until the result has only ...
- Generator & yield write in sync way
Generator & yield write in sync way var p = new Promise(function(resolve, reject){ setTimeout(fu ...