Javascript的继承
引用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的继承相关推荐
- 深入解析JavaScript 原型继承
JavaScript 原型继承,学习js面向对象的朋友可以看看.十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Object.prototype Ja ...
- JavaScript实现继承的方式,不正确的是:
JavaScript实现继承的方式,不正确的是:DA.原型链继承 B.构造函数继承 C.组合继承 D.关联继承 解析 javaScript实现继承共6种方式: 原型链继承.借用构造函数继承.组合继承. ...
- 白话解释 Javascript 原型继承(prototype inheritance)
来源: 个人博客 白话解释 Javascript 原型继承(prototype inheritance) 什么是继承? 学过"面向对象"的同学们是否还记得,老师整天挂在嘴边的面向对 ...
- JavaScript面向对象--继承 (超简单易懂,小白专属)...
JavaScript面向对象--继承 (超简单易懂,小白专属) 一.继承的概念 子类共享父类的数据和方法的行为,就叫继承. 二.E55如何实现继承?探索JavaScript继承的本质 2.1构造函数之 ...
- JavaScript实现继承的方式和各自的优缺点
ECMAscript只支持实现继承,主要是依靠原型链来实现的. JavaScript实现继承的方式: 类式继承 构造函数继承 组合继承 寄生组合式继承 1.类式继承 1 //类式继承 2 //声明父类 ...
- JavaScript实现继承的方式
这篇文章主要介绍JavaScript实现继承的方式: 类式继承 构造函数继承 组合继承 寄生组合式继承 extends继承 1.类式继承 简单的类式继承: // 声明父类function Animal ...
- JavaScript之继承(原型链)
JavaScript之继承(原型链) 我们知道继承是oo语言中不可缺少的一部分,对于JavaScript也是如此.一般的继承有两种方式:其一,接口继承,只继承方法的签名:其二,实现继承,继承实际的方法 ...
- jQuery-源码阅读,JavaScript原生继承方式与jQuery中的继承
JavaScript中继承方法有以下几种: 1.原型链继承: function Book (name,author){this.name=name;this.author=author;}Book.p ...
- js继承java方法吗_你知道JavaScript的继承吗?
导读: 在ES6 之前js中是并没有extends继承,就像是java的单继承继承,我们通过多实现的方法模拟java的多继承,所以我们也可以同通过,利用构造函数和原型对象实现来实现JavaScript ...
- JavaScript的继承,原型和原型链
前言 想必,学过 java 和 C++ 的小伙伴们,对于继承这个词应该不陌生,最近我也是一直在巩固JavaScript的知识,今天就来一起学习一下JavaScript里的继承吧. 继承是什么? 首先我 ...
最新文章
- c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识)
- win10设置默认打开方式
- jboss resin tomcat 相关
- 赖美云的认证照_真人秀及综艺类双榜单TOP10嘉宾热度认证 赖美云双面魅力引热议...
- PHP基于单例模式编写PDO类的方法
- CMake 入门与进阶
- word转PDF(使用liberOffice插件)
- CV+Deep Learning——网络架构Pytorch复现系列——classification(一:LeNet5,VGG,AlexNet,ResNet)
- python可执行文件 情人节快乐_各位情人节快乐, Python帮忙撒狗粮, 我连夜做了这个程序!(示例代码)...
- 咸鱼Maya笔记—Maya 绘制多边形
- 自己动手写网络爬虫(第一天)
- (八)flax Engine游戏引擎物理引擎——物理碰撞器
- 日积月累,聚沙成塔……
- cocos2dx-lua-andriond腾讯应用宝游戏接入错误汇总
- [JS]Array对象
- css3 特效大全,CSS3 特效范例整理
- Unity中使用QQ邮箱发送验证码
- Keil MDK5 编译报Undefined symbol __builtin_ffs 的错误的解决方法
- 挖地兔股票数据接口 tushare 初接触
- 毕业设计-基于微信小程序的高校宿舍报修系统
热门文章
- 廖雪峰JS教程学习记录----Map和Set
- Hibernate一对一主键单向关联
- mysql的日期和时间函数
- 页面每次添加都显示最后一次访问记录spring scope=prototype 学习笔记
- 循环 Request.ServerVariables
- java反射技术_java反射技术,逆向开发必备技能
- jeesite如何已生成数据的数据源_如何在postman中自动生成接口请求数据,这个功能你需要知道,可结合浏览器和两大抓包工具使用...
- 视觉SLAM十四讲学习笔记-第一讲
- TensorFlow笔记(2) 常量与变量
- php获取内存峰值,php内存\获取\使用