继承有几种方式,分别是什么?想要实现继承可使用什么方法?

这里是修真院前端小课堂,每篇分享文从前端

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】vue

八个方面深度解析前端知识/技能,本篇分享的是:java

【 继承有几种方式,分别是什么?想要实现继承可使用什么方法?  】jquery

【修真院xx(职业)小课堂】课题名称程序员

开场语:web

你们好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给你们分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX编程

(1)背景介绍:网络

对象:“无序属性的结合,其属性值能够包含基本值、对象或者函数”。框架

面向对象编程(OOP):核心思想是将各类复杂关系,抽象成一个个对象,而后由对象之间的分工合做,完成对真实世界的模拟。函数

在JS中继承是一个很是复杂的话题,比其余任何面向对象语言中的继承都复杂得多。在大多数其余面向对象语言中,继承一个类只需使用一个关键字便可。在JS中想要达到继承公用成员的目的,须要采起一系列措施。

(2)知识剖析:

JavaScript语言的对象体系,不是基于“类”,而是基于构造函数(constructor)和原型(prototype)

原型对象:只要建立一个新函数,就会根据特定的规则为该函数建立一个prototype属性指向其原型对象,默认状况下原型对象会自动得到一个constructor属性,该属性包含一个指向prototype属性所在函数的指针

 

clipboard.png

构造函数:自己是一个函数,出于建立特定类型新对象的目的而定义的,内部使用this变量,须要和new配合使用来建立实例,this变量会绑定在实例对象上。

封装模式:将“属性”和“方法”封装成对象的模式,即建立对象的方式

 

 
clipboard.png

clipboard.png

 

clipboard.png

 

clipboard.png

clipboard.png

 

clipboard.png

 

继承概念
许多OO语言都支持两种继承方式:接口继承和实现继承,接口继承只继承方法签名,实现继承则继承实际的方法

 

(3)常见问题:

js如何实现继承?

(4)解决方案:

 

clipboard.png

Cat如何继承Animal的species属性

 

 

 

 
clipboard.png

clipboard.png
clipboard.png
d.png](/img/bVbmXji)

![图片上传中...]

 

(5)编码实战:

现阶段中运用比较普遍的是组合式继承,由于原型链和构造函数继承方式都有相对应的缺点,好比说原型链最主要的问题来自包含引用类型值的原型。而构造函数的缺点是不能很好地封装对象方法。通常状况下只有对象没有方法的状况下才会使用构造函数。而组合式继承继承了原型链和构造函数的优势,并完善了两者的不足。function Fn1(){

this.colors=["red","blue","green"];

}

function Fn2(){

}

Fn2.prototype=new Fn1();//继承了Fn1()对象

var instance1 = new Fn2();

instance1.colors.push("black");

console.log(instance1.colors);//"red","blue","green","black"

var instance2 = new Fn2();

console.log(instance2.colors);//"red","blue","green","black"

 

(6)拓展思考:

ES6中JavaScript拥有类的概念了,参考java等语言思考JavaScript如何使用类来简化封装、继承。

(7)参考文献:

参考:阮一峰的网络日志

参考:JavaScript高级程序设计

(8)更多讨论:

Q1:继承通常用到什么地方?

A :一般在通常的项目里不须要,由于应用简单,但你要用纯js作一些复杂的工具或框架系统就要用到了,好比webgis、或者js框架如jquery、angular、vue什么的,否则一个几千行代码的框架不用继承得写几万行,甚至还没法维护。

Q2:如何肯定原型和实例之间的关系? 

A:两种方法:第一种是使用instanceOf操做符,第二种是使用isPrototypeOf()方法。 

eg:

console.log(person instanceOf Child);//true 

console.log(Child.prototype.isPrototypeOf(instance));//true 

Q3:什么是浅复制?

A :浅复制是复制引用,复制后的引用都是指向同一个对象的实例,彼此之间的操做会互相影响。

(9)鸣谢:

感谢冯强师兄,此教程是在他们以前技术分享的基础上完善而成。

(10)结束语:

今天的分享就到这里啦,欢迎你们点赞、转发、留言、拍砖

相关文章
相关标签/搜索