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.借助构造函数实现继承 原 ...
随机推荐
- UML_静态图
类图 类图是描述类,接口,协作以及它们之间关系的图,用来显示系统中各个类的静态结构.类图是定义其他图的基础,在类图的基础上,可以使用状态图,协作图,组件图和配置图等进一步描述系统其他方面 ...
- C app
1,C 输入输出字符串
- 从ora10g 刷数据到 8I基本操作步骤
从ora10g 刷数据到 8I基本操作步骤 master :oracle 10g snapshot site: oralce 8i 在oracle 8i 中物化视图称为快照,oracle 8i建快照的 ...
- 全国计算机等级考试二级教程-C语言程序设计_第5章_循环结构
for循环结构的嵌套 外层循环每循环一次,内层循环会完整循环一次. 外层循环是竖. 内层循环是横. for, do...while, while的选择: 如果有固定次数,如阶乘! ,判断素数,用 fo ...
- Android工程师面试准备知识点
听+7哥说,把下面的全弄懂,面试必过,所以我就试着去把所有题目补充了一下,各位能耐的网友们,如果有吐槽或者补充的尽管给我留言,在这里谢过大家了. 1. android的多线程如何通信 答:Andr ...
- c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别
本文来自:http://blog.csdn.net/tangjunping/article/details/5443337 以前经常为这几种数据类型转换方式而迷茫,这次为了彻底搞清它们之间的区别和优缺 ...
- 集装箱学习(两):动手模拟AOP
简单的说,Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. 上文已经介绍模拟IoC实现,这篇文章来动手模拟AOP. AOP简述 面向对象强调"一切皆是对象&quo ...
- R基础
R的对象类型包括数值型(numeric),复数型(complex),逻辑型(logical),字符型(character)和原味型(raw),列表(list)递归结构:函数(function)和表达式 ...
- C#运用实例.读取csv里面的词条,对每一个词条抓取百度百科相关资料,然后存取到数据库
第一步:首先需要将csv先装换成datatable,这样我们就容易进行对datatable进行遍历: /// 将CSV文件的数据读取到DataTable中 /// CSV文件路径 /// 返回读取了C ...
- Gitlab管理下本地Git配置
公司项目组用的是Gitlab,组内成员分配有有固定的git个人账户,不同成员有不同的模块编辑权限,使用前需要配置好本地的Git.对一直使用svn的小菜菜来说,这个还是需要一点步骤配置下才可以使用的.配 ...