引用infoQ的一片文章《JavaScript的实例化与继承:请停止使用new关键字》一段话:

"

传统的实例化与继承

假设我们有两个类,Class:function Class() {}SubClass:function SubClass(){},SubClass需要继承自Class。传统方法一般是按如下步骤来组织和实现的:

  • Class中被继承的属性和方法必须放在Class的prototype属性中

  • SubClass中自己的方法和属性也必须放在自己prototype属性中
  • SubClass的prototype对象的prototype(__proto__)属性必须指向的Class的prototype

"

Class中被继承的属性和方法必须放在Class的prototype属性中

// 声明一个class
function Class() {}// 给class的prototype添加一个类方法method1
Class.prototype.method1 = function() {console.log('class method1 called!');
}// 创建实例
var instance = new Class();
// 调用类方法
instance.method1();

上面的Class既声明为一个类, 并且给Class添加两个类方法,类方法也是一个Function,但不能通过Class.prototype.method的方式直接调用,但是可以通过Class.prototype.method.call的方式调用或者实例调用。

SubClass中自己的方法和属性也必须放在自己prototype属性中

SubClass 也是一样通过prototype来添加自己的类方法

SubClass的prototype对象的prototype(__proto__)属性必须指向的Class的prototype

function Class() {}Class.prototype.print = function(s) {console.log('class print>' + s);
}function SubClass() {  Class.call(this);}
// 通过Object.create来实现继承
SubClass.prototype = Object.create(Class.prototype)
SubClass.prototype.add = function(a, b) {return (a+b);
}

// SubClass添加类成员变量SubClass.prototype.name = 'abc';// 创建subclass实例
var b = new SubClass();// 调用subclass类方法
var r = b.add(1, 20);
// 调用父类Class的方法
b.print(r);

理解prototype链对实现继承很关键:

当实例b调用print方法时,先查找实例b(Object)有没有这样的function成员, 如果有则调用,没有则在SubClass的prototype(Object) 中查找,如果没有则在prototype.prototype(Object)中查找,顺着prototype链一直到找到为止,找不到就会报错。

上面的示例代码是实现继承的基本原理。

转载于:https://www.cnblogs.com/lovelylife/p/3724817.html

Javascript的继承相关推荐

  1. 深入解析JavaScript 原型继承

    JavaScript 原型继承,学习js面向对象的朋友可以看看.十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Object.prototype Ja ...

  2. JavaScript实现继承的方式,不正确的是:

    JavaScript实现继承的方式,不正确的是:DA.原型链继承 B.构造函数继承 C.组合继承 D.关联继承 解析 javaScript实现继承共6种方式: 原型链继承.借用构造函数继承.组合继承. ...

  3. 白话解释 Javascript 原型继承(prototype inheritance)

    来源: 个人博客 白话解释 Javascript 原型继承(prototype inheritance) 什么是继承? 学过"面向对象"的同学们是否还记得,老师整天挂在嘴边的面向对 ...

  4. JavaScript面向对象--继承 (超简单易懂,小白专属)...

    JavaScript面向对象--继承 (超简单易懂,小白专属) 一.继承的概念 子类共享父类的数据和方法的行为,就叫继承. 二.E55如何实现继承?探索JavaScript继承的本质 2.1构造函数之 ...

  5. JavaScript实现继承的方式和各自的优缺点

    ECMAscript只支持实现继承,主要是依靠原型链来实现的. JavaScript实现继承的方式: 类式继承 构造函数继承 组合继承 寄生组合式继承 1.类式继承 1 //类式继承 2 //声明父类 ...

  6. JavaScript实现继承的方式

    这篇文章主要介绍JavaScript实现继承的方式: 类式继承 构造函数继承 组合继承 寄生组合式继承 extends继承 1.类式继承 简单的类式继承: // 声明父类function Animal ...

  7. JavaScript之继承(原型链)

    JavaScript之继承(原型链) 我们知道继承是oo语言中不可缺少的一部分,对于JavaScript也是如此.一般的继承有两种方式:其一,接口继承,只继承方法的签名:其二,实现继承,继承实际的方法 ...

  8. jQuery-源码阅读,JavaScript原生继承方式与jQuery中的继承

    JavaScript中继承方法有以下几种: 1.原型链继承: function Book (name,author){this.name=name;this.author=author;}Book.p ...

  9. js继承java方法吗_你知道JavaScript的继承吗?

    导读: 在ES6 之前js中是并没有extends继承,就像是java的单继承继承,我们通过多实现的方法模拟java的多继承,所以我们也可以同通过,利用构造函数和原型对象实现来实现JavaScript ...

  10. JavaScript的继承,原型和原型链

    前言 想必,学过 java 和 C++ 的小伙伴们,对于继承这个词应该不陌生,最近我也是一直在巩固JavaScript的知识,今天就来一起学习一下JavaScript里的继承吧. 继承是什么? 首先我 ...

最新文章

  1. c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识)
  2. win10设置默认打开方式
  3. jboss resin tomcat 相关
  4. 赖美云的认证照_真人秀及综艺类双榜单TOP10嘉宾热度认证 赖美云双面魅力引热议...
  5. PHP基于单例模式编写PDO类的方法
  6. CMake 入门与进阶
  7. word转PDF(使用liberOffice插件)
  8. CV+Deep Learning——网络架构Pytorch复现系列——classification(一:LeNet5,VGG,AlexNet,ResNet)
  9. python可执行文件 情人节快乐_各位情人节快乐, Python帮忙撒狗粮, 我连夜做了这个程序!(示例代码)...
  10. 咸鱼Maya笔记—Maya 绘制多边形
  11. 自己动手写网络爬虫(第一天)
  12. (八)flax Engine游戏引擎物理引擎——物理碰撞器
  13. 日积月累,聚沙成塔……
  14. cocos2dx-lua-andriond腾讯应用宝游戏接入错误汇总
  15. [JS]Array对象
  16. css3 特效大全,CSS3 特效范例整理
  17. Unity中使用QQ邮箱发送验证码
  18. Keil MDK5 编译报Undefined symbol __builtin_ffs 的错误的解决方法
  19. 挖地兔股票数据接口 tushare 初接触
  20. 毕业设计-基于微信小程序的高校宿舍报修系统

热门文章

  1. 廖雪峰JS教程学习记录----Map和Set
  2. Hibernate一对一主键单向关联
  3. mysql的日期和时间函数
  4. 页面每次添加都显示最后一次访问记录spring scope=prototype 学习笔记
  5. 循环 Request.ServerVariables
  6. java反射技术_java反射技术,逆向开发必备技能
  7. jeesite如何已生成数据的数据源_如何在postman中自动生成接口请求数据,这个功能你需要知道,可结合浏览器和两大抓包工具使用...
  8. 视觉SLAM十四讲学习笔记-第一讲
  9. TensorFlow笔记(2) 常量与变量
  10. php获取内存峰值,php内存\获取\使用