返回

高级原型链知识普及,深入剖析JavaScript学习(3) - 聊聊原型链- 2. 对象与原型

前端

JavaScript学习(3) - 聊聊原型链- 2. 对象与原型

"了解对象与原型的本质,是JavaScript编程的必备技能。" - 道格拉斯·克罗克福特

在JavaScript中,对象是一个存储相关数据的容器。每个对象都有一个隐式原型属性,该属性指向创建它的构造函数的原型对象。原型对象也具有一个原型属性,依此类推,形成一个原型链。原型链允许对象访问其原型及其原型对象的属性和方法。

对象的prototype属性

对象的prototype属性指向创建它的构造函数的原型对象。可以通过以下方式访问对象的prototype属性:

object.__proto__

例如,如果我们有一个名为person的对象,它是Person构造函数的实例,则我们可以通过以下方式访问person的原型属性:

person.__proto__

这将返回Person构造函数的原型对象。原型对象也具有一个__proto__属性,该属性指向Object构造函数的原型对象。Object构造函数的原型对象是所有对象的最终原型,其__proto__属性为null

实例属性

对象的实例属性是属于该对象的属性,可以通过点号(.)操作符访问。例如,如果我们有一个名为person的对象,具有nameage属性,则我们可以通过以下方式访问这些属性:

person.name
person.age

创建对象的方式

在JavaScript中,有三种主要方式来创建对象:

  • 原型模式
  • 构造函数模式
  • 寄生模式

原型模式

原型模式是最简单的方法来创建对象。它涉及创建一个对象,然后使用该对象作为原型来创建新对象。例如,我们可以创建一个名为person的对象,具有nameage属性,如下所示:

let person = {
  name: "John Doe",
  age: 30
};

然后,我们可以使用person对象作为原型来创建新对象。例如,我们可以创建一个名为student的对象,具有nameagegrade属性,如下所示:

let student = Object.create(person);
student.name = "Jane Doe";
student.age = 20;
student.grade = "A";

student对象现在具有nameagegrade属性。它还继承了person对象的prototype属性,该属性指向Person构造函数的原型对象。

构造函数模式

构造函数模式是一种更灵活的方式来创建对象。它涉及创建一个构造函数,然后使用该构造函数来创建新对象。例如,我们可以创建一个名为Person的构造函数,具有nameage属性,如下所示:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

然后,我们可以使用Person构造函数来创建新对象。例如,我们可以创建一个名为john的对象,具有John Doe30nameage属性,如下所示:

let john = new Person("John Doe", 30);

john对象现在具有nameage属性。它还继承了Person构造函数的prototype属性,该属性指向Person构造函数的原型对象。

寄生模式

寄生模式是一种更复杂的方式来创建对象。它涉及创建一个对象,然后将另一个对象附加到该对象。例如,我们可以创建一个名为person的对象,具有nameage属性,如下所示:

let person = {
  name: "John Doe",
  age: 30
};

然后,我们可以创建一个名为student的对象,具有grade属性,如下所示:

let student = {
  grade: "A"
};

然后,我们可以将student对象附加到person对象,如下所示:

Object.assign(person, student);

现在,person对象具有nameagegrade属性。它还继承了Object构造函数的prototype属性,该属性指向Object构造函数的原型对象。

总结

对象与原型是JavaScript编程的基础知识。了解对象与原型的本质,可以帮助我们更好地理解JavaScript语言,并编写出更加健壮的代码。