高级原型链知识普及,深入剖析JavaScript学习(3) - 聊聊原型链- 2. 对象与原型
2024-02-19 11:28:29
JavaScript学习(3) - 聊聊原型链- 2. 对象与原型
"了解对象与原型的本质,是JavaScript编程的必备技能。" - 道格拉斯·克罗克福特
在JavaScript中,对象是一个存储相关数据的容器。每个对象都有一个隐式原型属性,该属性指向创建它的构造函数的原型对象。原型对象也具有一个原型属性,依此类推,形成一个原型链。原型链允许对象访问其原型及其原型对象的属性和方法。
对象的prototype属性
对象的prototype属性指向创建它的构造函数的原型对象。可以通过以下方式访问对象的prototype属性:
object.__proto__
例如,如果我们有一个名为person
的对象,它是Person
构造函数的实例,则我们可以通过以下方式访问person
的原型属性:
person.__proto__
这将返回Person
构造函数的原型对象。原型对象也具有一个__proto__
属性,该属性指向Object
构造函数的原型对象。Object
构造函数的原型对象是所有对象的最终原型,其__proto__
属性为null
。
实例属性
对象的实例属性是属于该对象的属性,可以通过点号(.)操作符访问。例如,如果我们有一个名为person
的对象,具有name
和age
属性,则我们可以通过以下方式访问这些属性:
person.name
person.age
创建对象的方式
在JavaScript中,有三种主要方式来创建对象:
- 原型模式
- 构造函数模式
- 寄生模式
原型模式
原型模式是最简单的方法来创建对象。它涉及创建一个对象,然后使用该对象作为原型来创建新对象。例如,我们可以创建一个名为person
的对象,具有name
和age
属性,如下所示:
let person = {
name: "John Doe",
age: 30
};
然后,我们可以使用person
对象作为原型来创建新对象。例如,我们可以创建一个名为student
的对象,具有name
、age
和grade
属性,如下所示:
let student = Object.create(person);
student.name = "Jane Doe";
student.age = 20;
student.grade = "A";
student
对象现在具有name
、age
和grade
属性。它还继承了person
对象的prototype
属性,该属性指向Person
构造函数的原型对象。
构造函数模式
构造函数模式是一种更灵活的方式来创建对象。它涉及创建一个构造函数,然后使用该构造函数来创建新对象。例如,我们可以创建一个名为Person
的构造函数,具有name
和age
属性,如下所示:
function Person(name, age) {
this.name = name;
this.age = age;
}
然后,我们可以使用Person
构造函数来创建新对象。例如,我们可以创建一个名为john
的对象,具有John Doe
和30
的name
和age
属性,如下所示:
let john = new Person("John Doe", 30);
john
对象现在具有name
和age
属性。它还继承了Person
构造函数的prototype
属性,该属性指向Person
构造函数的原型对象。
寄生模式
寄生模式是一种更复杂的方式来创建对象。它涉及创建一个对象,然后将另一个对象附加到该对象。例如,我们可以创建一个名为person
的对象,具有name
和age
属性,如下所示:
let person = {
name: "John Doe",
age: 30
};
然后,我们可以创建一个名为student
的对象,具有grade
属性,如下所示:
let student = {
grade: "A"
};
然后,我们可以将student
对象附加到person
对象,如下所示:
Object.assign(person, student);
现在,person
对象具有name
、age
和grade
属性。它还继承了Object
构造函数的prototype
属性,该属性指向Object
构造函数的原型对象。
总结
对象与原型是JavaScript编程的基础知识。了解对象与原型的本质,可以帮助我们更好地理解JavaScript语言,并编写出更加健壮的代码。