在JavaScript中,每个对象都有一个[[Prototype]]内部属性,它指向另一个对象,该对象称为原型。每个构造函数(除Object以外)都有一个prototype属性,其中包含一个指向构造函数原型的对象引用。通过使用构造函数和原型,我们可以实现面向对象编程的特性。
构造函数
构造函数是一种创建对象的特殊函数。它被用于创建具有相同属性和方法的对象。在构造函数函数体内,使用this关键字来引用新创建的对象。构造函数通常以大写字母开头,以便与其他函数区分开来。
function Person(name, age) { this.name = name; this.age = age; } const person1 = new Person('Lucy', 20); console.log(person1); // {name: "Lucy", age: 20}
在上面的例子中,Person是一个构造函数。它接受两个参数,name和age,并将它们保存为新创建对象的属性。通过调用new操作符并传递所需的参数,我们可以创建一个新的Person对象。
原型
原型是一个对象,用于存储共享方法和属性。每个JavaScript对象都有一个原型对象。当我们尝试访问对象中不存在的属性或方法时,JavaScript会查找原型对象是否存在该属性或方法。如果原型对象中存在该属性或方法,则它将使用该属性或方法。
-- -------------------- ---- ------- -------- ------------ ---- - --------- - ----- -------- - ---- - ---------------------------- - ----------- ----- ------- - --- -------------- ---- --------------------------------- -- --------
在上面的例子中,我们向Person
的原型对象添加了一个属性nationality
。当我们创建一个新的Person
实例时,它会从原型继承nationality
属性并且值为'American'。
原型链
原型链是一种将多个对象链接在一起的方式。每个JavaScript对象都有一个[[Prototype]]内部属性,用于指向其原型对象。原型对象本身也是JavaScript对象,并且也有自己的[[Prototype]]内部属性。因此,可以通过一系列原型对象的链接来访问所有对象的属性和方法。
-- -------------------- ---- ------- -------- ------------ ---- - --------- - ----- -------- - ---- - ---------------------------- - ----------- -------- ------------- ---- ------ - ----------------- ----- ----- ---------- - ------ - ----------------- - -------------------------------- ----------------------------- - -------- ----- -------- - --- -------------- --- ------- ---------------------------------- -- --------
在上面的例子中,我们创建了一个名为Student
的构造函数,它继承了Person
构造函数的属性和方法。我们使用Object.create()
方法设置Student
的原型对象为Person
的原型对象,这样Student
实例就可以访问Person
的属性和方法。我们还将Student.prototype.constructor
设置为Student
本身,以确保它指向正确的构造函数。
总结
构造函数、原型和原型链是JavaScript面向对象编程的重要概念。通过使用它们,我们可以创建具有共享属性和方法的对象,并在不同层次上继承属性和方法。深入理解这些概念对于编写高质量的JavaScript代码至关重要。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/11583