面向对象编程(一)

一、面向对象编程的概念

面向对象编程(Object Oriented Programming 简称OOP)是目前主流的编程模式。它将真实世界各种复杂的关系,抽象为一个个对象,然后由对象之间的分工和合作,完成对真实世界的模拟。
每一个对象都是功能中心,具有明确分工,可以完成接收信息、处理数据、发出信息等任务,可以复用,还可以通过继承机制进行定制。因此面向对象编程具有,灵活、代码可复用、高度模块化的特点。更适合多人合作的大型软件项目。

二、构造函数

js语言对象体系基于构造函数(construtor)和原型链 (prototype)。构造函数是专门用来生成实例的模板,是对象的模板,描述示例对象的结构。为与普通函数区别,第一个字母会大写。
另外构造函数有两个特点:1、构造函数使用了this关键字,代表了要生成的对象实例 2、生成对象的时候必须使用new命令。
代码示例
在这里插入图片描述
使用new命令时它后面的函数一次执行以下步骤
1、创建一个空对象作为要返回的实例
2、将这个空对象的原型指向构造函数的prototype属性
3、将这个空对象赋值给函数内部的this关键字
4、开始执行构造函数内部的代码
也就是说构造函数内部这个this指的是空对象,所有this的操作实际则是这个空对象的操作,从而构造出需要的样子
如果构造函数内部有return ,return后面跟的是一个对象则new命令返回的就是return后面指定的对象,否者就会忽略return返回this对象
代码示例
在这里插入图片描述
注 :函数内部可以使用new target 如果该函数是new调用的则new.target 指向当前函数,否则就是undefined ,可用来判断函数调用时是否使用的new
例:
在这里插入图片描述
Object.create()的用法
使用现有对象生成新的实例对象

在这里插入图片描述

三、this关键字的理解

this返回的总是一个对象,简单的说this就是属性和方法当前所在的对象。this的指向是可变的,只要函数赋值给一个变量this指向就会发生变化
this的适用场合 :全局环境(this指的是window) ,构造函数(this指的是实例对象)、对象的方法,发生赋值this的指向就会发生变化。
使用时注意:
1、避免多层嵌套this
2、避免回调函数中使用this
3、避免数组方法使用this
绑定this的方法 call、apply、bind

四、prototype(原型)的理解

构造函数有一个缺点就是一个对象实例化的多个对象之间无法共享属性,而prototype则可以在构造函数原型对象上操作属性解决这个问题,原型对象上的所有属性和方法都可以被实例共享,从而增加了多个实例之间的联系性还能节省内存

在这里插入图片描述

五、 原型链的理解

所有的对象都有自己的原型对象,每个对象有能充当另一个对像的的原型对象,对象到原型,再到原型的原型,延续下去就形成了原型链(prototype chain)
所有的原型都能上溯到Object.prototype,而Object.prototype的原型是null因此原型链的尽头是null
在这里插入图片描述

注:Object.getPrototypeOf()可以返回参数对象的原型
在读取一个对象的某个属性时,js会先从自身的属性上寻找,找不到就会上溯到原型对象的属性去找,然后就是原型的原型,一层层寻找,当找到最顶端的原型null,null的属性是undefined,则返回的就是undifined ,寻找属性的层级越往上则对性能影响越大,如果存在某个不存在的属性则会遍历整个原型链

六、constructor和inatanceof

constructor是prototype的一个属性,默认指向prototype的构造函数,它的作用是可以知道某个实例对象是哪一个构造函数产生的

在这里插入图片描述
constructor.name可以直接返回原型对象的名字
在这里插入图片描述
instanceof 运算符返回一个布尔值表示对象是否为某个构造函数的实例
在这里插入图片描述
以上写法等价于
在这里插入图片描述
不过需要注意的是,instaceof 左边是实例化对象,右边是原型对象 而prototype.isPrototype()左侧是原型对象,参数为实例化对象
instanceof也经常用于判断对象的类型

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40969782/article/details/115318789
今日推荐