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.借助构造函数实现继承 原 ...
随机推荐
- systemctl 命令完全指南
http://www.linuxidc.com/Linux/2015-07/120833.htm Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器. System ...
- pomelo初探
最近发现了一个比较好玩的东西pomelo.地址:点击打开链接 这个东西是网易开发的一套基于node.js的高性能,分布式游戏服务器框架.这套框架不仅可以用来开发游戏服务器,也可用于开发高实时web应用 ...
- iOS使用ffmpeg播放rstp实时监控视频数据流
一.编译针对iOS平台的ffmpeg库(kxmovie) 最近有一个项目.须要播放各种格式的音频.视频以及网络摄像头实时监控的视频流数据,经过多种折腾之后,最后选择了kxmovie,kxmovie项目 ...
- 解决Mac OS Adobe Flash Builder 4.7 java heap space 问题【转】
1. 在Finder中打开Adobe Flash Builder 4.7的安装目录 2. 在Adobe Flash Builder 4.7.app上点击右键“Show Package contents ...
- MTK Android4.0.3 ICS 添加缅甸语Myanmar
最近几个项目需要添加缅甸语,借助网络资源,同时结合自身实践,成功添加缅甸语,现分享经验如下. 一. 前期工作: 准备Myanmar字库,下载地址:http://www.myordbok.com/mya ...
- SSCTF-Final-Re-Play
SSCTF-Final-Re-Play 比赛时花了一晚上搞定了,结果写脚本的时候发送的内容忘记base64加密然后异或8了,手动测试的时候当然是这样做了,写脚本的时候脑抽了.这个题只有forx做出来 ...
- orapwd创建密码文件
在CMD里输入命令如下:C:\Documents and Settings\Administrator>orapwd Usage: orapwd file=<fname> passw ...
- T-SQL存储过程
存储过程(procedure)就是一个函数,完成一段sql代码的封装,实现代码的重用. 优点: 1.比使用DotNet直接写Sql脚本执行少了一块解析编译的过程.效率更快一点点. ...
- html网页获取php网页数据等知识记录
所有跟php有关的网页都必须在Apache服务器下打开.需要配置好confg.ini的文件路径. AJAX: 通过事件不断的向服务器发送请求,然后服务器会时时返回最新的数据,这就是AJAX的功能 PS ...
- 用ul、li做横向导航
/* ul li以横排显示 */ /* 所有class为menu的div中的ul样式 */ div.menu ul { list-style:none; /* 去掉ul前面的符号 */ margin: ...