1、基本概念

子类继承父类,但是不能影响父类。包括1.混合继承(构造函数+原型) 2.ES6新增class的继承。

接下来介绍,面向对象中继承的两种常用写法。即混合继承(构造函数+原型)class继承。推荐class继承

需要用到的知识点,构造函数、原型与原型链。

(1)构造函数:构造函数是函数、也是类。通过new调用,产生实例对象。通过实例对象访问对象下面具有的属性和方法。(构造函数内部的属性和方法都是私有的)
        属性:对象的特点,修饰对象的,私有。
        方法:对象的功能,共有的。
(2)prototype:每一个函数都有一个原型prototype对象,原型对象里面放的是对象共有属性和方法。
(3)__proto__:每一个对象都有一个__proto__属性,原型链依靠这个属性连接起来。

2、混合继承

  2.1构造函数:apply/call实现

  

function Person(name, age, sex) {//构造函数
this.name = name;
this.age = age;
this.sex = sex;
}
Person.prototype.singing = function () {//原型上的方法
console.log('人都唱歌');
}
function Student(name, age, sex, pro) {
//this:实例对象,即Student类实例
//******继承构造函数里面的属性和方法*******。
//构造函数的继承。arguments:父类函数的参数。
Person.apply(this, arguments);
//Person.call(this, name, age, sex);
this.pro = pro;
}

  2.2原型prototype:

  (1)原型链继承---最优

 //******继承原型下面的方法(原型链继承)*******。
//父类的实例给子类的原型。
//弊端:子类的构造函数被父类覆盖了。
Student.prototype = new Person();
Student.prototype.constructor = Student;//将子类的构造函数恢复

  (2)拷贝继承

第一种
for (let i in Person.prototype) { //浅拷贝,for...in...是成立的
Student.prototype[i] = Person.prototype[i];
}
第二种
Object.assign(Student.prototype, Person.prototype);//浅拷贝

这样就实现了继承类里面的构造函数和原型上的方法属性,并且保留了自身的属性方法。


3、class继承

核心关键字:extendssuper

super:

  子类必须在constructor方法中调用super()方法,否则新建实例就会报错。以及,子类自己的this对象,必须通过父类构建,也就是说如果不调用super方法,无法使用this。
super既可当函数使用,也可当对象使用。
class Person {
constructor(name, age, sex) {//constructor:构造函数。
this.name = name;
this.age = age;
this.sex = sex;
}
showinfo() {
return `你的姓名是:${this.name},你今年${this.age}岁,你是${this.sex}的`;
}
} class Student extends Person {
constructor(name, age, sex, pro) {
//继承,包括父类属性和方法 这里super当函数使用的。
super(name, age, sex);
this.pro = pro;
}
showinfo() {//重写showinfo方法
console.log(super.showinfo() + `,我的专业是${this.pro}`);//这里super当对象使用,调用父类的方法
}
}
let s1 = new Student('lisi', 200, '女', 'web开发');
console.log(s1.name);//lisi
s1.showinfo();//输出:你的姓名是:lisi,你今年200岁,你是女的,我的专业是web开发

最后

大自然不需要代码,但人类需要。---作者留

JS中面向对象中的继承(常用写法)---核心部分的更多相关文章

  1. 探讨 JS 的面向对象中继承的那些事

    最近学了 JS 的面向对象,这篇文章主要是探讨 JS 的面向对象中继承的那些事. JS中继承的特点: 1.子类继承父类: 2.子类可以用父类的方法和属性 3.子类的改变可以不影响父类 下面用一个例子来 ...

  2. 实用JS系列——面向对象中的类和继承

    背景: 在最开始学习JavaScript时,我们就知道,它是一种脚本语言,也有面向对象机制.但它的面向对象继承机制是基于原型的,即Prototype.今天,我们就来找一下JS中OO的影子. 创建类 1 ...

  3. JS高级 - 面向对象5(继承,引用)

    <script type="text/javascript"> //------------------Person类 //(Person)的构造函数 function ...

  4. 关于js中原生构造函数的继承

    前言 在如今快节奏的工作当中,很多基础的东西会渐渐地被丢掉.就如继承这个话题,写React的同学应该都是class xxx extends React.Component,然而这可以理解为es5的一个 ...

  5. Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。

    Python3 与 C# 面向对象之-继承与多态   文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...

  6. js中的几种继承方法

    JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一. 继承:子承父业:一个原本没有某些方法或属性的对象,统一写方法,拿到了另外一个对象的属性和方法 下面是js中的几种继承方式 1.改变this ...

  7. js中的原型、继承的一些想法

    最近看到一个别人写的js类库,突然对js中的原型及继承产生了一些想法,之前也看过其中的一些内容,但是总不是很清晰,这几天利用空闲时间,对这块理解了一下,感觉还是有不通之处,思路上没那么条理,仅作为分享 ...

  8. PHP面向对象中常用的关键字和魔术方法

    PHP面向对象中常用的关键字 final        1.final不能修饰成员属性(类中常量不是用这个关键字)        2.final只能修饰类和方法 作用:            使用fi ...

  9. js中面向对象编程

    一.理解对象: 第一种:基于Object对象 var person = new Object(); person.name = 'My Name'; person.age = 18; person.g ...

随机推荐

  1. python调用存储过程失败返回1787错误

    (1787, 'When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP T ...

  2. 如何处理xml文件!看看这里

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

  3. Tricks of Android's GUI

    Tricks of Android's GUI */--> Tricks of Android's GUI 1 layoutweight In LinearLayout, the default ...

  4. Linux BASH简单总结

    BASH: 变量的设置规则: 1.变量与变量内容以一个符号"="来链接 2.等号两边不能直接接空白字符 3.变量名称只能是英文字母与数字,但是不能以数字开头 4.变量内容若有空白字 ...

  5. Doc: NetBeans

    NetBeans的最新版本已经更新为Apache NetBeans. 安装JDK 在Mac OS X下,有".dmg"的安装包,可以直接安装.只要JDK的版本大于1.8.0就可以安 ...

  6. [LC] 14. Longest Common Prefix

    Write a function to find the longest common prefix string amongst an array of strings. If there is n ...

  7. 吴裕雄--天生自然 python开发学习笔记:一劳永逸解决绘图出现中文乱码问题方法

    import numpy as np import matplotlib.pyplot as plt x = np.random.randint(0,20,10) y = np.random.rand ...

  8. html一个页面链接携带参数跳转另一个页面基于vue2.0的element框架

    来给生活比个耶! 1.按钮 <el-button @click="albumList(scope.row.id)" size="mini" type=&q ...

  9. Proto3:C++ API概览

    包名 说明 google::protobuf Protocol Buffer运行时库核心组件. google::protobuf::io I/O操作辅助类. google::protobuf::uti ...

  10. Android APP性能及专项测试

    移动测试. Android测试 .APP测试 Android篇 1. 性能测试 Android性能测试分为两类:1.一类为rom版本(系统)的性能测试2.一类为应用app的性能测试 Android的a ...