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 继承方式的实现的更多相关文章

  1. JavaScript继承方式详解

    原文链接 : http://segmentfault.com/a/1190000002440502 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继 ...

  2. JavaScript继承方式详解[转]

    js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于对象的,它没有类的概念.所以,要想实现 ...

  3. JavaScript 继承方式详解

    js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承)类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于对象的,它没有类的概念.所以,要想实现继 ...

  4. JavaScript继承方式

    我的上一篇随笔中写了有关原型继承的,下面介绍几种更加有用的. 借用构造函数 在解决原型中关于引用类型值所带来的问题,开发人员开始使用一种叫做借用构造函数. 基本思想: 在子类型构造函数的内部调用超类型 ...

  5. Javascript的四种继承方式

    在Javascript中,所有开发者定义的类都可以作为基类,但出于安全性考虑,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击. 选定基类后,就可 ...

  6. JavaScript之四种继承方式讲解

    在Javascript中,所有开发者定义的类都可以作为基类,但出于安全性考虑,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击. 选定基类后,就可 ...

  7. 总结javascript继承的两种方式的N中写法

    最近翻看博客园,总结了一下javascript的继承方式:prototype和copy继承方式. 一.prototype方式 当一个函数被创建时,Function构造函数产生的函数会隐式的被赋予一个p ...

  8. JavaScript中的几种继承方式对比

    转自:http://blog.csdn.net/kkkkkxiaofei/article/details/46474069 从’严格’意义上说,JavaScript并不是一门真正的面向对象语言.这种说 ...

  9. JavaScript各种继承方式和优缺点

    好久没写博客啦,嘻嘻,这个月是2017年的最后一个月啦,大家应该都开始忙着写年终总结了吧,嘻嘻,小颖今天给大家分享下Javascript中的几种继承方式以及他们的优缺点. 1.借助构造函数实现继承 原 ...

随机推荐

  1. linux之SQL语句简明教程---DISTINCT

    SELECT 指令让我们能够读取表格中一个或数个栏位的所有资料.这将把所有的资料都抓出,无论资料值有无重复.在资料处理中,我们会经常碰到需要找出表格内的不同资料值的情况.换句话说,我们需要知道这个表格 ...

  2. UML_行为图

    活动图是UML用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流.活动图在本质上是一种流程图.活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的 ...

  3. KMP算法java实现

    /** * 假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置 如果j = -1,或者当前字符匹配成功(即S[i] == * P[j]),都令i++,j++,继续匹配下一个字符: 如果j != ...

  4. Oracle 表的常见操作

    --创建表并指定表空间 create table goods( id VARCHAR2(20) primary key, name VARCHAR2(20) NOT NULL, price NUMBE ...

  5. Hive 4、Hive 的安装配置(远端MyMql模式)

    1.remote一体 这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务.这里用mysql的测试服务器,ip位192.168.1.214,新建hive_re ...

  6. iOS 三维变换

    1:平移 一个4*4的单位矩阵乘以一个P(x,y,z,1)的行向量,则表示此矩阵向x轴移动了x的单位,向Y轴移动了y个单位,向Z轴移动了z个单位,最后获得移动后的目标矩阵是 [ 1, 0, 0, 0  ...

  7. 【Tarjan,LCA】【3-21个人赛】【problemD】

    Problem D Time Limit : 6000/3000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Sub ...

  8. javascript中关于数组的迭代方法

    //都接受3个参数,分别为:值.在数组中的位置.数组对象本身 var num = [2, 1, 5, 4, 2, 1, 6, 8, 19]; //every:若每一项都返回true,则返回true v ...

  9. 2D转换

    转换是CSS3 中具有颠覆性的特征之一,可以实现元素的位移.旋转.变形.缩放,甚至支持矩阵方式,配合即将学习的过渡和动画知识,可以取代大量之前只能靠Flash才可以实现的效果.在css3 当中,通过t ...

  10. C# 7 函数 青歌赛打分 天气预报

    函数: 数据类型--变量常量--运算符表达式--语句(顺序,分支,循环)--数组--函数 程序里的函数:能完成一个相对独立功的代码块. 数学里的函数:高度抽象. 函数四要素:函数名,输入,输出,加工 ...