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 的面向对象编程至关重要。通过本文的学习,你应该能够理解如何利用原型和原型链来设计对象之间的关系,并实现代码的复用。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。
开发学习网


