我的上一篇随笔中写了有关原型继承的,下面介绍几种更加有用的。

借用构造函数

在解决原型中关于引用类型值所带来的问题,开发人员开始使用一种叫做借用构造函数。

基本思想:

在子类型构造函数的内部调用超类型的构造函数,这种类型java里面的继承。

函数只不过是特定执行环境中执行代码的对象,因此通过使用apply和call方法也可以在新创建的对象上执行构造函数。

function SuperType(){
this.colors = ["red","blue","green"];
} function SubType(){
//继承SuperType
SuperType.call(this);//在新SubType对象上执行SuperType函数定义的所有对象初始化代码,所以SubType的每个实例就会有自己的colors属性的副本了
} var instance1 = new SubType();
instance1.colors.push("black");
alert(instance1.colors);//"red","blue","green","black" var instance2 = new SubType();
alert(instance2.colors);//"red","blue","green"

借用构造函数的问题

1.方法都在构造函数中定义,因此函数就无从复用了。

2.在超类型的原型中定义的方法,对子类型而言也是不可见的。

考虑到这些问题,借用构造函数的技术也是很少见的。

组合继承

将原型链和借用构造函数的技术组合在一起。其背后的思路是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。

这样通过在原型上定义方法也实现了函数复用,又能保证每个实例都有自己的属性。

function SuperType(name){
this.name = name;
this.colors = ["red","blue","green"];
} SuperType.prototype.sayName = function(){
alert(this.name);
}; function SubType(name,age){
//使用借用构造函数
SuperType.call(this,name);
this.age = age;
} //继承方法(原型继承)
SubType.prototype = new SuperType();
SubType.prototype.constructor = SubType;
SubType.prototype.sayAge = function(){
alert(this.age);
}

Object.create()方法

规范了原型式继承。这个方法接受一个用作新对象原型的对象和(可选的)一个为新对象定义额外属性的对象。

寄生式继承

寄生组合式继承

最后两个继承不是很清楚,等之后看了视频理解更详细再来补充

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 继承方式的实现

    1.原型链继承 function superType(name){ this.name= 'milk'; } super.prototype.sayName=function(){ console.l ...

  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]Linux printf 输出重定向【转】

    转自:http://www.cnblogs.com/aaronLinux/p/6765145.html?utm_source=itdadao&utm_medium=referral 方法一 # ...

  2. python基础===8道基础知识题

    本文转自微信公众号: 2018-03-12 leoxin 菜鸟学Python 原文地址:http://mp.weixin.qq.com/s/JJSDv5YJOZ9e3hn28zWIsQ NO.1 Py ...

  3. PhysX SDK src

    PhysX SDK src Physx3.3 source code http://download.csdn.net/download/qq122252656/9427387 Nvidia CUDA ...

  4. Oracle 集合

    --合并(UNION.UNION ALL) select * from empwhere ename like '%A%'unionselect * from empwhere ename like ...

  5. Rsync文件同步服务

    Rsync简介 Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具,适用于Unix/Linux/Windows等多种操作系统. Rsync的特性 支持拷贝特殊 ...

  6. JVM核心机制(类加载器、三种类加载器、代理加载模式、双亲委派机制

  7. ZOJ-3314

    CAPTCHA Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %lld , %llu Java class ...

  8. Jquery动态添加元素并给元素增加onchange相应

    动态添加元素: $select = $("<select></select>"); $("<option></option> ...

  9. 接口测试Session/Cookie笔记(二)

    Windows系统运行计算器命令:calc python显示上一步操作命令:Alt+p python显示上一步操作结果:_(英文下划线) Session是存放在服务器的键值对 ,用于保存客户端的某个特 ...

  10. c# 发送web请求

    我们目前涉及到的现有的接收请求方式有三种, 第一种: 页面式的Form表单 第二种: 服务的webservice形式的xml 第三个: restful风格的post包体json 第一种比较老,博客园的 ...