JS 面向对象

98 阅读2分钟

面向对象

面向对象编程简称 oop,关注一个需求实现的步骤,分析一步步的业务逻辑,逐步实现

js 的面向对象的特性 :封装、继承、(没有多态)

js 只有单线程,没有多线程

构造函数

通过构造函数创建对象时,如果把方法放到实例对象身上,会导致创建多个对象时,方法也跟着创建多个,造成内存的浪费

缺点:所有的方法都一样时,会导致内存浪费

js 面向对象中的封装性,是借助构造函数来实现的

原型对象 prototype

什么是原型对象:所有的构造函数都有一个属性:prototype 这也是一个对象,称为原型对象

特点:

1.所有通过构造函数创建出来的实例对象,都可以访问原型对象中的成员

2.实例创建再多,都不会重复创建原型对象,每个构造函数的原型对象都是唯一的,因为它是随着构造函数的走的

3.对象会优先找自己身上的属性和方法

公共的属性和方法放在原型上,这是不变的原则

原型中的 this

原型对象中方法的 this 指向:调用者,实例对象

注意事项:

1.构造函数不能是箭头函数,因为箭头函数 this 的指向 和当前环境有关

2.原型的函数要根据情况判断,如果用了箭头函数意味着 this 不在是实例对象(可以理解为箭头函数内没有 this)

原型对象中的 constructor

原型对象 和 constructor 相互引用

原型 proto

__proto__ 原来是 JS非标准属性,但是 es6 规范中开始标准化

[[prototype]]和 __proto__意义相同

原型链 instanceof

instanceof 一般可以判断具体的引用数据类型,比 typeof 更准确,typeof一般用于判断基本数据类型,判断 引用数据的结果都是 object,不会返回具体的 ,而 instanceof 会返回 具体的(例如 Array)

用来检测构造函数.prototype 是否存在于实例对象的原型链上

instanceof 的返回值是 布尔值

原型继承

总结:

1.创建父级构造函数

2.将所有公共的方法放到父级的原型对象上

3.将子级构造函数的原型对象指向 父级构造函数创建的 实例对象