ES6前:用Prototype实现JavaScript继承的原理与示例
在ES6之前,JavaScript使用原型(prototype)来实现继承。原型是一个对象,它包含了对象的属性和方法,这些属性和方法可以被该对象的实例继承。 在JavaScript中,每个对象都有一个内部的[[Prototype]]属性,这个属性指向创建该对象的函数的原型对象。原型对象也有自己的[[Prototype]]属性,这个属性指向创建原型对象的函数的原型对象,以此类推。 当一个对象访问一个属性或方法时,如果该对象本身没有这个属性或方法,JavaScript会沿着[[Prototype]]链向上查找,直到找到为止。 例如,我们有一个Person构造函数,我们想要创建一个Student构造函数,该构造函数继承自Person构造函数: ```javascript function Person(name) { this.name = name; } Person.prototype.sayName = function() { console.log(this.name); } function Student(name, grade) { Person.call(this, name); // 将this引用传给Person构造函数 this.grade = grade; } Student.prototype = Object.create(Person.prototype); // 将Student的原型设置为Person的实例 Student.prototype.constructor = Student; // 修正Student的构造函数 var student = new Student('Tom', 'Grade 1'); student.sayName(); // 输出 "Tom" ``` 在这个例子中,我们使用Object.create方法将Student的原型设置为Person的实例,这样Student的实例就可以继承Person的所有属性和方法。然后,我们还需要将Student的构造函数修正为Student,否则在访问Student.prototype的属性和方法时,JavaScript会查找Student的构造函数的原型,而不是Student的原型。 ######[AI写代码神器 | 340点数解答 | 2023-11-09 01:47:30]
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)30
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)350
- 探秘 Linux sensors 原理:从硬件读取到数据监测的全面剖析(GPT | 407点数解答 | 2024-10-21 16:06:25)265
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)271
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)269
- JavaScript 开发必知:ES5 与 ES6(ES2015)的全面对比与差异揭秘 (阿里通义 | 326点数解答 | 2023-11-09 00:55:40)278
- React:从 ES5 到 ES6 编程规范的八大变革(阿里通义 | 399点数解答 | 2023-11-09 01:39:33)246
- ES6 实用函数:过滤字符串,依据第二个字符串字符净化首字符串!(字节豆包 | 122点数解答 | 2024-10-30 10:30:30)236
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)322
- 无名杀“放逐”技能代码实现:主动技限两回,失技摸牌任你选! (字节豆包 | 528点数解答 | 2025-08-27 23:16:22)100
- C++ 实战:交通工具基类与小汽车类的继承实现及测试(字节豆包 | 391点数解答 | 2024-09-18 16:16:39)267
- Java 实现交通工具类继承:从 Vehicles 到 Car 的完整示例(字节豆包 | 289点数解答 | 2024-09-18 16:16:54)242