JavaScript原型继承

由于使用了原型继承,因此JavaScript在流行的编程语言领域中是非常独特的。让我们找出这意味着什么

由于使用了原型继承,因此JavaScript在流行的编程语言领域中是非常独特的。

尽管大多数面向对象的语言都使用基于类的继承模型,但JavaScript还是基于原型继承模型

这是什么意思?

每个JavaScript对象都有一个属性,称为prototype,它指向另一个对象。

这个不同的对象是对象原型

我们的对象使用该对象原型继承属性和方法。

假设您有一个使用对象文字语法创建的对象:

const car = {}

或使用new Object句法:

const car = new Object()

在任何情况下,carObject

如果初始化一个数组,它是一个对象:

const list = []
//or
const list = new Array()

原型是Array

您可以通过与Object.getPrototypeOf()Object.prototype.isPrototypeOf()方法:

const car = {}
const list = []

Object.getPrototypeOf(car) === Object.prototype Object.prototype.isPrototypeOf(car)

Object.getPrototypeOf(list) === Array.prototype Array.prototype.isPrototypeOf(list)

具有该原型的对象可以使用该原型的所有属性和方法:

Object.prototype是所有对象的基本原型:

Object.getPrototypeOf(Array.prototype) == Object.prototype

如果您想知道Object.prototype的原型是什么,那就没有原型了:null。这是一个特殊的雪花❄️。

您看到的上述示例是原型链工作中。

我可以创建一个扩展Array的对象,并使用该对象实例化任何对象,将在其原型链中包含Array和Object并从所有祖先继承属性和方法。

除了使用new操作符来创建对象,或者使用对象和数组的文字语法,可以使用Object.create()

传递的第一个参数是用作原型的对象:

const car = Object.create({})
const list = Object.create(Array)

注意,因为您可以使用实例化数组

const list = Object.create(Array.prototype)

在这种情况下Array.isPrototypeOf(list)是假的,而Array.prototype.isPrototypeOf(list)是真的。

免费下载我的JavaScript初学者手册


更多js教程: