Js 对象进阶
🍹 JavaScript对象进阶需理解原型和继承机制,使用高阶函数和ES6新特性实现高效和灵活的对象操作,提升开发效率。
1 创建对象
1 |
|
2 工厂方法
1 |
|
3 构造函数
- 构造函数
- 普通函数直接调用,构造函数需使用new关键字调用。
- 类似于工厂方法,但是将创建对象和返回对象隐藏了。
- 使用同一构造函数创建的对象,称为一类对象,也将一个构造函数称为一个类(模拟类)。
- 构造函数习惯首字母使用大写形式,根据函数调用方式的不同,this将指向不同的对象。
- 以函数的形式调用时,this永远都是指window。
- 以方法的形式调用时,this则是调用方法的那个对象。
- 以构造函数的形式调用时,this是新创建的那个对象。
- 使用call和apply调用时,this是传入的那个指定对象。
1 |
|
4 原型对象
- 原型对象
- 创建的每个函数,解析器都会向函数中添加一个属性prototype。
- 这个属性对应着一个对象,这个对象就是原型对象,即显式原型。
- 当函数以构造函数形式调用时,所创建的对象中都会有一个隐含的属性。
- 指向该构造函数的原型对象,可通过
__proto__
(隐式原型)访问该属性。- 访问对象一个属性或方法时,先在对象自身中寻找。
- 找到返回,没有就沿着
__proto__
这条链向上查找。 - 找到返回,若最终没找到,返回undefined,这就是原型链。
- 原型链又称为隐式原型链,作用则是查找对象的属性或方法。
- Object对象是所有对象的老祖,原型对象指向为null,即无原型对象。
1 |
|
5 对象继承
- 对象继承
- JavaScript是通过一种叫原型(prototype)的方式来实现面向对象编程的。
- 实现继承的好处是子对象可以使用父对象的属性和方法,从而简化代码。
- 六种经典的对象继承方式
- 原型链继承、构造函数继承。
- 原型式继承、寄生组合继承。
- 寄生式继承、组合方式继承。
5-1 原型链继承
- 原型链继承
- 子类型的原型为父类型的一个实例对象。
- 缺点
- 不能传递参数,继承单一,多个实例的引用类型属性指向相同。
- 一个实例修改了原型属性,另一个实例的原型属性也会被修改。
1 |
|
5-2 构造函数继承
- 构造函数继承
- 通过使用
call()
和apply()
方法将父类构造函数引入子类函数。 - 使用父类构造函数增强子类实例,等同于复制父类的实例给子类。
- 缺点
- 只能继承父类的实例属性和方法,不能继承原型的属性和方法。
- 无法实现构造函数的复用,每个子类都有父类实例函数的副本。
- 影响性能,代码会臃肿。
- 通过使用
1 |
|
5-3 组合方式继承
- 组合方式继承
- 原型链继承、构造函数继承的组合方式继承。
- 缺点
- 父类的实例属性和方法即存在于子类的实例中,又存在于子类的原型中,后者仅是内存占用。
- 使用子类创建实例对象时,原型会存在两份相同的属性和方法,该方法是最常用的继承模式。
1 |
|
6 垃圾回收
- 垃圾回收
- 当一个对象没有任何变量或属性对其进行引用,此时将无法操作该对象。
- 该对象即垃圾,过多占用大量内存空间,导致程序运行变慢,必须清理。
- Js拥有自动的垃圾回收机制,将这些垃圾对象从内存中销毁,需将不再使用的对象设为null。
1 |
|
7 对象判断
1 |
|
8 toString()
- toString()
- toString()函数用于将当前对象以字符串的形式返回。
- 该方法属于Object对象,由于所有对象都继承了Object的对象实例。
- 几乎所有实例对象都可使用该方法,所有主流浏览器均支持该函数。
1 |
|
Js 对象进阶
https://stitch-top.github.io/2024/08/14/web/web01-javascript/javascript03-js-dui-xiang-jin-jie/