coderwhy深入前端就业指导+八股文(完结)
获取ZY↑↑方打开链接↑↑
课程会学到的内容
原型链(Prototype Chain)和继承(Inheritance)是JavaScript中非常重要的概念,它们对于理解JavaScript中的对象如何关联以及如何复用代码至关重要。
原型链(Prototype Chain)
在JavaScript中,几乎所有的对象都是通过某种形式的原型链连接到另一个对象的。原型链的基本思想是利用原型对象(prototype)将一个对象的引用属性指向另一个对象,从而实现属性的继承。
- 每个对象都有一个内部链接到另一个对象(称为原型)的链接(
[[Prototype]],在ES5中可通过Object.getPrototypeOf(obj)访问,ES6中引入的Object.prototype.__proto__属性也提供了对原型对象的访问,但不建议使用,因为它不是标准属性)。 - 原型对象也可以是另一个对象的原型,以此类推,形成一个链式结构,这就是所谓的“原型链”。
- 当访问一个对象的属性时,如果该对象自身不存在该属性,则会沿着原型链向上查找,直到找到该属性或到达原型链的末端(
null)。
继承(Inheritance)
继承是面向对象编程(OOP)中的一个核心概念,它允许我们定义一种新类型的对象,这种新类型的对象会继承现有类型(称为基类或父类)的属性和方法,同时我们也可以添加新的属性和方法。
在JavaScript中,由于它是基于原型的语言,继承的实现方式与传统的基于类的语言(如Java或C++)有所不同。JavaScript中主要有以下几种继承方式:
- 原型链继承:这是JavaScript中最基本的继承方式,通过将子类的原型设置为父类的一个实例来实现。但这种方式存在一些问题,如所有实例都会共享父类实例的属性(如果属性是可写的),以及构造函数无法传递参数等。
- 借用构造函数(伪造对象或经典继承) :通过在子类构造函数中调用父类构造函数来借用父类的属性和方法。这种方式可以实现构造函数参数的传递,但方法无法复用,每次创建子类实例时都会调用父类构造函数来创建方法。
- 组合继承(原型链+借用构造函数) :这是JavaScript中最常用的继承模式,结合了原型链继承和借用构造函数的优点,通过借用构造函数继承属性,通过原型链继承方法。这种方式既可以传递参数,又可以复用方法。
- 原型式继承:通过复制一个现有的对象来创建新的对象,这种方式实际上是基于现有的对象及其原型链,通过为新的对象创建一个原型对象(该原型对象是一个已存在的对象)来实现继承。
- 寄生式继承:与原型式继承类似,但它会增强对象,即返回的对象是一个经过增强的对象实例,而不是简单的原型链关系。
- 寄生组合式继承:这是组合继承的一个改进,通过借用构造函数来继承属性,但通过使用寄生式继承来继承原型,从而避免了组合继承中子类原型上不必要的属性复制。
综上所述,原型链和继承是JavaScript中非常重要的概念,它们为JavaScript的面向对象编程提供了强大的支持。通过理解这些概念,我们可以更加高效地编写可维护、可扩展的JavaScript代码。