JS中的继承操作实例总结


Posted in Javascript onJune 06, 2020

本文实例讲述了JS中的继承操作。分享给大家供大家参考,具体如下:

1.原型链继承

function SuperType() {
  this.property = true; 
}
SuperType.prototype.getSuperValue = function() {
  return this.property;
}
function SubType() {
  ths.subproperty = false;
}
SubType.prototype = new SuperType();   // 实现继承
SubType.prototype.getSubValue = function() {
  return this.subproperty;
}
var instance = new SubType();
console.log(instance.getSuperValue());   // true

原理:让SuperType的实例成为子类的原型对象,子类的实例拥有了父类的属性和方法。但也有弊端,如果父类的属性是引用类型,这将导致共享的属性被改变的时候,全部的属性将被改变,我们一下代码。

function SuperType() {
  this.property = [1,2,3]; 
}
SuperType.prototype.getSuperValue = function() {
  return this.property;
}
function SubType() {
  ths.subproperty = false;
}
SubType.prototype = new SuperType();   // 实现继承
SubType.prototype.getSubValue = function() {
  return this.subproperty;
}
var instance1 = new SubType();
var instance2 = new SubType();
instance1.property.push(4);
console.log(instance1.property);   // [1,2,3,4]
console.log(instance2.property);   // [1,2,3,4]

我们修改一处的实例属性,两个实例的属性都会被修改,因为这个属性是共享的,这也是原型链继承的缺点。

2.构造函数继承

function SuperType(name) {
  this.name = name;
  this.numbers = [1,2,3];
}
function SubType() {
  SuperType.call(this,"Nicholas");
  this.age = 29;
}

var instance1 = new SubType();
var instance2 = new SubType();
instance1.property.push(4);
console.log(instance1.name);    // Nicholas
console.log(instance1.age);     // 29
console.log(instance1.numbers);   // [1,2,3,4]
console.log(instance2.numbers); // [1,2,3]

在子类中调用父类的构造函数,每次实例化时都会新建父类的属性放在新实例中,因此每个实例中的属性都是不一样的,改变一个实例的值不会造成另一个实例的值改变。这个继承方式的缺点是方法的定义不能复用。

3.组合继承

这个方法将原型链继承和构造函数继承结合到一起,融合了他们各自的优点。

function SuperType(name) {
  this.name = name;
  this.colors = ["red","blue","green"]
}
SuperType.prototype.sayName = function() {
  console.log(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() {
  console.log(this.age);
}

var instance1 = new SubType("Nicholas", 29);
var instance2 =new SubType("Greg", 27);
instance1.colors.push("black");
console.log(instance1.colors);    // red,blue,green,black
console.log(instance2.colors);    // red,blue,green
instance1.sayName();         // Nicholas
instance2.sayName();         // Greg
instance1.sayAge();           // 29
instance2.sayAge();           // 27

4.class继承

ES6中可以通过class创建对象,通过关键字extends继承。

class Point {
 constructor(x, y) {
  this.x = x;
  this.y = y;
 }
}

class ColorPoint extends Point {
 constructor(x, y, color) {
  this.color = color; // ReferenceError
  super(x, y);
  this.color = color; // 正确
 }
}

在ES6的继承中,子类一定要重写父类的构造函授的方法,否则会报错。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
关于jquery append() html时的小问题的解决方法
Dec 16 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
Oct 15 Javascript
IE中的File域无法清空使用jQuery重设File域
Apr 24 Javascript
JavaScript的null和undefined区别示例介绍
Sep 15 Javascript
详解JavaScript的Polymer框架中的通知交互
Jul 29 Javascript
javascript每日必学之多态
Feb 23 Javascript
JS弹性运动实现方法分析
Dec 15 Javascript
AngularJS中ng-class用法实例分析
Jul 06 Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
Vue2仿淘宝实现省市区三级联动
Apr 15 Javascript
elementUi vue el-radio 监听选中变化的实例代码
Jun 28 Javascript
Three.js实现雪糕地球的使用示例详解
Jul 07 Javascript
ES6 async、await的基本使用方法示例
Jun 06 #Javascript
JS 数组和对象的深拷贝操作示例
Jun 06 #Javascript
ES6 Generator基本使用方法示例
Jun 06 #Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 #jQuery
ES6 Symbol在对象中的作用实例分析
Jun 06 #Javascript
微信小程序多列表渲染数据开关互不影响的实现
Jun 05 #Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
Jun 05 #Javascript
You might like
PHP5 字符串处理函数大全
2010/03/23 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
JavaScript函数详解
2014/11/17 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
python生成日历实例解析
2014/08/21 Python
Python迭代用法实例教程
2014/09/08 Python
Python 模板引擎的注入问题分析
2017/01/01 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
python圣诞树编写实例详解
2020/02/13 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
python 如何将office文件转换为PDF
2020/09/22 Python
python excel和yaml文件的读取封装
2021/01/12 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
Weblogic的布署方式
2013/08/23 面试题
暑期政治学习心得体会
2014/09/02 职场文书
市场部岗位职责范本
2015/04/15 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
党支部培养考察意见
2015/06/02 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
python基础之停用词过滤详解
2021/04/21 Python
vue的项目如何打包上线
2022/04/13 Vue.js