【基础类】—面向对象类系统性学习

这篇具有很好参考价值的文章主要介绍了【基础类】—面向对象类系统性学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、类与实例

1. 类的声明

  1. 构造函数模拟一个类
function Animal () {
	this.name = 'name'
}
  1. ES6 Class声明
//  类名
class Animal2 {
    // 构造函数
	constructor () {
		// 属性
		this.name = name
	}
}

2.生成实例

  1. 通过 new 实例化一个类
console.log(new Animal(), new Animal2())
// PS: 类没有参数时,可以省略括号
console.log(new Animal, new Animal2)

二、类与继承

1.如何实现继承

  1. 借助构造函数实现继承
function Parent1 () {
	this.name = 'parent1';
}
function Child1 () {
	// call/ apply 改变函数运行的上下文, Parent1再子类的构造函数执行,同时修改了父类this的指向到child内部,从而导致父类的属性都会挂载到子类这个实例上
	Parent1.call(this);
	this.type ='child1'
}

console.log(new Child1())
Child1 {name: 'parent1', type: 'child1'}

缺点: Parent1的原型上的属性和方法,并没有被child所继承。

Parent1.prototype.say = function () {
	console.log('你好')
}
Child1 下没有say方法

总结:只实现了部分继承,如果父类的属性都在构造函数里面,完全可以实现继承,如果父类的原型对象上还有方法或属性,那么子类是无法拿到方法或属性的

  1. 借助原型链实现继承
function Parent2 () {
	this.name = 'parent2';
}
function Child2 () {
	this.type = 'child2'
}
Child2.prototype = new Parent2();
// prototype 是子类构造函数的一个属性,这个属性是一个对象,这个对象是可以任意赋值的,这个对象赋值了一个Parent2的实例
// new Child2() 生成一个新的实例, new Child2.__proto__ === Child2.prototype === new Parent2()
console.log(new Child2())
function Parent2 () {
	this.name = 'parent2';
    this.play = [1,2,3]
}
function Child2 () {
	this.type = 'child2'
}
Child2.prototype = new Parent2();

var s1 = new Child2();
var s2 = new Child2();
console.log(s1.play, s2.play)
(3) [1, 2, 3] (3) [1, 2, 3]
s1.play.push(4);
console.log(s1.play, s2.play)
(4) [1, 2, 3, 4] (4) [1, 2, 3, 4]

缺点:因为原型链的原型对象是共用的,所以修改原型对象的属性,其他实例也会受影响

s1.__proto__  === s2.__proto__
true
  1. 组合方式继承
function Parent3 () {
	this.name = 'parent3'
	this.play = [1,2,3]
}
function Child3 () {
	Parent3.call(this);
	this.type = 'child3'
}
Child3.prototype = new Parent3();
var s3 = new Child3();
var s4 = new Child3();
s3.play.push(4)
console.log(s3.play, s4.play)
(4) [1, 2, 3, 4] (3) [1, 2, 3]
缺点:Parent3.call(this)new Parent3() , Parent3 执行了2
  1. 组合方式继承优化1
function Parent4 () {
	this.name = 'parent4'
	this.play = [1,2,3]
}
function Child4 () {
	Parent4.call(this);
	this.type = 'child4'
}
Child4.prototype = Parent4.prototype;
var s5 = new Child4();
var s6 = new Child4();
s5.play.push(4)
console.log(s5.play, s6.play)
// (4) [1, 2, 3, 4] (3) [1, 2, 3]
// s5 是否Child4的实例, s5 是否是Parent4的实例
console.log(s5 instanceof Child4, s5 instanceof Parent4)
// true true
s5.constructor
ƒ Parent4 () {
	this.name = 'parent4'
	this.play = [1,2,3]
}

缺点:无法区分构造函数的实例,是由父类创造的还是有子类创造的文章来源地址https://www.toymoban.com/news/detail-632272.html

  1. 组合方式继承优化2
function Parent5 () {
	this.name = 'parent5'
	this.play = [1,2,3]
}
function Child5 () {
	Parent5.call(this);
	this.type = 'child5'
}
// 通过中间对象的方法,把父类和子类区分开
Child5.prototype = Object.create(Parent5.prototype)
Child5.prototype.constructor = Child5
var s7 = new Child5();
console.log(s7 instanceof Child5, s7 instanceof Parent5)
console.log(s7.constructor)
true true
ƒ Child5 () {
	Parent5.call(this);
	this.type = 'child5'
}

2.继承的几种方式

  1. 借助构造函数实现继承
  2. 借助原型链实现继承
  3. 借助构造函数和原型链实现组合继承

到了这里,关于【基础类】—面向对象类系统性学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C/C++网络编程基础知识超详细讲解第一部分(系统性学习day11)

    目录 前言 一、网络的含义与构成 含义: 构成:  二、网络的体系结构 1OSI七层模型 2TCP/IP协议体系结构  3数据经过体系结构,怎么封装?  4端口号 5大小端序 6TCP/UDP传输层的协议  三、系统函数API学习框架(TCP)     服务器(优先):  客户端: 四、服务器和客户端代码实

    2024年02月08日
    浏览(50)
  • C/C++网络编程基础知识超详细讲解第三部分(系统性学习day13)

                                                        懒大王感谢大家的关注和三连支持~    目录 前言 一、并发服务器 1.进程并发服务器 实例代码如下:  2.线程并发服务器 实例代码如下:  二、域通信 域通信TCP实例代码如下:  三、广播与组播(UDP)  1.广播 实例代码

    2024年02月05日
    浏览(47)
  • 如何系统性的学习Python语言

    零基础同学的福音来了,如果你对Python语言的学习感兴趣,接下来可以由浅入深的了解下Python语言,哪怕你是零基础的小白也完全可以学会的,最后也会给大家放出学习和实例相结合的教程及方法,给到各位同学系统性的教学,最重要的是免费,可真谓是学生党们的福音呀。

    2024年02月10日
    浏览(45)
  • 系统性学习vue-组件及脚手架

    书接上文 Vue脚手架是Vue官方提供的标准化开发工具(开发平台) CLI: command line interface (命令行接口工具) 俗称脚手架 备注: 如果下载缓慢可以配置npm淘宝镜像: npm config set registry https://registry.npm.taobao.org Vue脚手架隐藏了所有webpack相关配置,弱项查看具体的webpack配置,请执行 vue ins

    2024年02月02日
    浏览(47)
  • 初识C语言——详细入门(系统性学习day4)

    目录 前言 一、C语言简单介绍、特点、基本构成 简单介绍: 特点: 基本构成: 二、认识C语言程序 标准格式: 简单C程序: 三、基本构成分类详细介绍    (1) (2)数据类型 计算机中常用存储单位 数据类型的取值范围 打印输入类型 (3)常量和变量 常量的分类:

    2024年02月08日
    浏览(37)
  • C/C++ 线程超详细讲解(系统性学习day10)

    目录 前言 一、线程基础 1.概念  2.一个进程中多个线程特征 2.1 线程共有资源 2.2 线程私有资源   3.线程相关的api函数  3.1 创建线程 创建线程实例代码如下:  需要特别注意的是: -lpthread和-pthread的区别 3.2 给线程函数传参   传参实例代码如下: 3.3 给线程收尸 收尸实例代码

    2024年02月08日
    浏览(36)
  • vim的使用介绍以及命令大全(系统性学习day3)

                                                                                        懒羊羊感谢大家的关注和三连支持~  目录 前言 一、vim的使用介绍 二、命令大全 1.命令模式 (1)复制(配合粘贴命令p使用) (2)剪切 (3)粘贴 (4)删除 (5)撤销/恢复  (

    2024年02月08日
    浏览(41)
  • C/C++进程超详细详解【中部分】(系统性学习day07)

    目录 前言 一、守护进程 1.概念 2.守护进程创建的原理(如图清晰可见)  3.守护进程的实现(代码块) 二、dup和dup2 1,复制文件描述符 2.文件描述符重定向 三、系统日志 1,打开日志 2,向日志中写消息 3,关闭日志 四,文件锁 1.概念 2,给整个文件上锁 实例代码如下: 

    2024年02月08日
    浏览(47)
  • C/C++进程超详细详解【上部分】(系统性学习day06)

    目录 前言 一、进程基础 1.进程概念 2.进程特征 3.进程状态(如图清晰可见) 4,进程的标识 实例代码如下: 5.进程的种类 实例shell脚本程序如下: 二、进程API 1.创建子进程 实例代码如下: 2.exec函数族  函数族讲解图如下所示: 实例代码如下所示:  3.结束进程 实例代码如下

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包