JavaScript 基础:原型与原型链

原创
admin 6个月前 (06-11) 阅读数 42 #JavaScript

在 JavaScript 中,原型(Prototype)和原型链(Prototype Chain)是理解对象继承的核心概念。通过原型机制,JavaScript 实现了基于原型的继承,使得对象可以共享方法和属性。本文将详细介绍 JavaScript 的原型与原型链,并通过代码示例帮助你更好地理解这一特性。


什么是原型(Prototype)

每个函数在 JavaScript 中都有一个 prototype 属性,这个属性是一个对象,包含可以被该函数的所有实例共享的属性和方法。

function Person(name) {    this.name = name;}Person.prototype.sayHello = function() {    console.log(`Hello, my name is ${this.name}`);};const person1 = new Person("Alice");const person2 = new Person("Bob");person1.sayHello(); // 输出: Hello, my name is Aliceperson2.sayHello(); // 输出: Hello, my name is Bob

关键点:

prototype 属性:当通过构造函数创建对象时,新对象会有一个内部属性 [[Prototype]],它指向构造函数的 prototype 对象。共享方法:所有通过构造函数创建的对象都可以访问 prototype 上的方法或属性。

什么是原型链(Prototype Chain)

当尝试访问一个对象的属性或方法时,如果该对象本身没有定义,则会沿着原型链向上查找,直到找到为止。如果没有找到,则返回 undefined

示例:

function Animal() {}Animal.prototype.eat = function() {    console.log("I am eating.");};function Dog() {}Dog.prototype = Object.create(Animal.prototype); // 设置 Dog 的原型为 Animal 的实例Dog.prototype.bark = function() {    console.log("Woof!");};const myDog = new Dog();myDog.bark(); // 输出: Woof!myDog.eat();  // 输出: I am eating.console.log(myDog instanceof Dog);    // trueconsole.log(myDog instanceof Animal); // true

关键点:

Object.create():用于创建一个新对象,并指定其原型。instanceof 操作符:检查对象是否是某个构造函数的实例。原型链的终止:原型链最终会指向 null,因为 Object.prototype.__proto__ === null

如何查看原型与原型链

可以通过以下方式查看对象的原型及其原型链:

function Person(name) {    this.name = name;}Person.prototype.greet = function() {    console.log(`Hi, I'm ${this.name}`);};const person = new Person("John");// 查看对象的原型console.log(Object.getPrototypeOf(person) === Person.prototype); // true// 查看原型链console.log(Person.prototype.__proto__ === Object.prototype); // trueconsole.log(Object.prototype.__proto__); // null

关键点:

Object.getPrototypeOf(obj):获取对象的原型。__proto__ 属性:非标准但广泛支持的属性,表示对象的内部原型。

总结

原型(Prototype) 是 JavaScript 中实现继承的核心机制。原型链(Prototype Chain) 决定了属性和方法的查找路径。理解原型与原型链对于掌握 JavaScript 的面向对象编程至关重要。

通过本文的学习,你应该能够理解如何利用原型和原型链来设计对象之间的关系,并实现代码的复用。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。

作者文章
热门
最新文章
标签列表