了解 JavaScript 原型:继承和方法共享综合指南

了解 javascript 原型:继承和方法共享综合指南

JavaScript原型机制:继承与共享的精髓

JavaScript中的原型机制,是其对象创建和继承的基础。每个对象都关联一个原型对象,用于继承属性和方法,实现代码复用和高效的继承方式。

1. 原型是什么?

每个JavaScript对象都拥有一个内部属性[[Prototype]],指向其原型对象。该原型对象包含该对象实例共享的属性和方法。我们可以通过__proto__属性(多数浏览器支持)或Object.getPrototypeOf()方法访问对象的原型。

例如,新建对象时,会继承其构造函数的原型对象上的属性和方法:

立即学习“Java免费学习笔记(深入)”;

function Person(name, age) {  this.name = name;  this.age = age;}// 向Person原型添加方法Person.prototype.greet = function() {  console.log("Hello, " + this.name);};const person1 = new Person("John", 30);person1.greet(); // 输出: "Hello, John"

2. 原型链

JavaScript对象通过原型链彼此关联。访问对象的属性或方法时,JavaScript会先查找对象自身,若不存在,则沿着原型链向上查找,直到Object.prototype(根原型对象)。若仍未找到,则返回undefined

function Animal(name) {  this.name = name;}Animal.prototype.speak = function() {  console.log(this.name + " makes a sound.");};function Dog(name) {  Animal.call(this, name); // 继承Animal的属性}Dog.prototype = Object.create(Animal.prototype); // 设置原型链Dog.prototype.constructor = Dog; // 修正构造函数引用const dog1 = new Dog("Buddy");dog1.speak(); // 输出: "Buddy makes a sound."

3. 向原型添加方法

将方法添加到构造函数的原型中,所有实例都能访问该方法。这是定义共享方法的更高效方式。

function Car(make, model) {  this.make = make;  this.model = model;}// 向原型添加方法Car.prototype.displayInfo = function() {  console.log(this.make + " " + this.model);};const car1 = new Car("Toyota", "Corolla");car1.displayInfo(); // 输出: "Toyota Corolla"

4. 构造函数与原型的关系

原型对象与构造函数密切相关。使用new关键字创建对象实例时,实例的[[Prototype]]会被设置为构造函数的原型。

function Student(name, grade) {  this.name = name;  this.grade = grade;}Student.prototype.study = function() {  console.log(this.name + " is studying.");};const student1 = new Student("Alice", "A");console.log(student1.__proto__ === Student.prototype); // true

5. 原型继承

原型继承允许对象继承另一个对象的属性和方法。通过将一个对象的原型设置为另一个对象的原型实现。

function Animal() {  this.legs = 4;}Animal.prototype.walk = function() {  console.log("Walking...");};function Dog(name) {  this.name = name;}Dog.prototype = Object.create(Animal.prototype); // 继承AnimalDog.prototype.constructor = Dog; // 修正构造函数引用const dog2 = new Dog("Rex");console.log(dog2.legs); // 输出: 4dog2.walk(); // 输出: "Walking..."

6. Object.getPrototypeOf()Object.setPrototypeOf()

Object.getPrototypeOf()Object.setPrototypeOf() 方法用于获取和修改对象的原型。 但修改原型在运行时可能会影响性能,建议谨慎使用。

const obj = {};const proto = { greet() { console.log("Hello!"); } };Object.setPrototypeOf(obj, proto);obj.greet(); // 输出: "Hello!"

7. 原型与性能

原型机制能高效共享方法和属性,但运行时修改原型可能导致性能问题。最佳实践是在创建后避免修改原型。

8. 关键点总结

每个对象都有一个原型,形成原型链。原型用于继承属性和方法。在构造函数原型中定义共享方法更高效。JavaScript继承是通过原型链实现的。Object.getPrototypeOf()Object.setPrototypeOf() 用于操作原型。

结论

JavaScript原型机制是其面向对象编程的关键,理解其工作原理能编写更高效、更优雅的代码。

作者:Abhay Singh Kathayat

全栈开发工程师,精通前端和后端技术,致力于构建高效、可扩展、用户友好的应用程序。 联系邮箱:kaashshorts28@gmail.com

以上就是了解 JavaScript 原型:继承和方法共享综合指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1499628.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 21:55:36
下一篇 2025年12月19日 21:55:56

相关推荐

  • 掌握 JavaScript 中的对象

    JavaScript 对象详解 JavaScript 对象是键值对的集合,值可以是数据(属性)或函数(方法)。 它在 JavaScript 中至关重要,因为几乎所有事物,包括数组、函数甚至其他对象,都是对象。 1. 对象创建方法 a. 对象字面量 最便捷的创建对象方式是使用花括号 {}。 示例: c…

    2025年12月19日
    000
  • 掌握 JavaScript 中的解构:简化数组和对象

    JavaScript 解构:数组和对象的简化处理 ES6 引入的 JavaScript 解构功能,让数组和对象数据的提取和赋值变得高效便捷。它提升了代码的可读性和简洁性。 1. 数组解构 数组解构将数组元素直接赋值给变量: const numbers = [1, 2, 3, 4];const [x,…

    2025年12月19日
    000
  • 掌握 JavaScript 中的数组函数:slice、splice 和 forEach

    JavaScript 数组函数详解:slice、splice 和 forEach JavaScript 提供丰富的内置数组方法,方便开发者操作和处理数组元素。本文重点介绍三种常用的数组方法:slice、splice 和 forEach,它们能显著提升数组操作的效率和代码简洁性。 1. slice()…

    2025年12月19日
    000
  • 掌握 JavaScript 中的数字方法

    javascript 中的数字方法 javascript 提供了多种内置方法来有效地处理数字。这些方法允许您执行格式化、舍入、解析和验证数字等操作。 1.转换数字 a. tostring() 将数字转换为字符串。 const num = 123;console.log(num.tostring())…

    好文分享 2025年12月19日
    000
  • 掌握 JavaScript 中的柯里化:增强代码的可重用性和灵活性

    JavaScript 柯里化详解 柯里化是 JavaScript 函数式编程中的一项重要技术,它将接受多个参数的函数转换为一系列只接受单个参数的函数链。这种方法增强了函数的灵活性,并提升了代码的可重用性。 1. 柯里化机制 柯里化过程将一个多参数函数分解为一系列单参数函数。第一个函数接收第一个参数,…

    2025年12月19日
    000
  • JavaScript 中的原型链:理解继承和对象查找

    JavaScript 原型链详解 JavaScript 的原型链是其继承机制的核心概念,它允许对象继承其他对象的属性和方法。 原型链工作机制 创建 JavaScript 对象时,它会链接到另一个对象——其原型。每个对象都有一个隐含的内部属性 [[Prototype]],指向其原型对象。 访问对象属性…

    2025年12月19日
    000
  • 了解 JavaScript 运算符:带有示例的完整指南

    ### javascript 中的运算符 javascript 中的运算符是用于对值和变量执行运算的特殊符号。这些操作可以涉及算术、赋值、比较、逻辑和其他操作。了解运算符对于执行基本计算、比较和控制代码流程至关重要。 javascript 支持多种运算符,它们分为以下类型: ### 1. **算术运…

    好文分享 2025年12月19日
    000
  • JavaScript 中类型转换的完整指南:隐式与显式强制转换

    JavaScript 类型转换 JavaScript 的类型转换是指将数据从一种类型转换为另一种类型。作为动态类型语言,JavaScript 变量无需预先声明类型,系统会在需要时自动或手动进行类型转换。 类型转换类型 JavaScript 提供两种类型的转换: 隐式类型转换(类型强制)显式类型转换 …

    2025年12月19日
    000
  • 掌握JavaScript中的数组方法:map、filter和reduce

    JavaScript数组核心方法:map、filter和reduce详解 JavaScript提供了一套强大的数组方法,其中map、filter和reduce这三个高阶函数是每个开发者都必须掌握的利器,它们能显著简化数组操作。 1. map方法 map方法通过回调函数转换数组的每个元素,并返回一个新…

    2025年12月19日
    000
  • AnySphere 的 Cursor:彻底改变 AI 驱动编码

    软件开发世界在不断发展,而人工智能现在处于这一变革的最前沿。在众多重塑行业的人工智能工具中,AnySphere 的 Cursor 作为一款创新的编码助手脱颖而出,旨在简化开发工作流程。无论您是经验丰富的开发人员还是新手,Cursor AnySphere 都提供强大的功能,使您的编码过程更快、更智能、…

    2025年12月19日
    000
  • 人工智能发音训练器

    在本文中,我介绍了我正在从事的项目:AI Pronunciation Trainer(在线),这是一个旨在帮助您利用人工智能的力量提高发音的工具。这个项目是对 Thiagohgl 原始 AI Pronunciation Trainer 的重构,我对其进行了一些改进,以使该工具更有效且更易于使用。 它…

    2025年12月19日
    000
  • 自写 Lang 图状态

    第一人工智能响应: 输出:感谢您伸出援手,.我很乐意为您提供帮助,但我想确保我完全理解您的需求。您能否提供有关您正在寻找的内容的更多详细信息?您分享的信息越多,我就越能提供帮助!我很乐意尽我所能地帮助你。您想进一步探索某个特定领域吗?您的意见将帮助我根据您的具体需求定制我的帮助。我完全致力于让您的体…

    2025年12月19日
    000
  • React 新钩子 useActionState

    通常,在使用表单时,您需要: a) 显示加载程序 b) 显示验证错误 这通常意味着管理几个状态变量。但随着 react 19 中引入的新 useactionstate 钩子,现在有一种更简单的方法来处理它。 链接 演示 代码库 react hook:useactionstate 在以下代码片段中,请…

    2025年12月19日
    000
  • 将 Golang 延迟概念实现到 Javascript 中

    在 go 中,defer 语句推迟函数的执行,直到周围的函数返回。这是一个简单的例子: package mainimport “fmt”func main() { fmt.println(“start”) defer fmt.println(“defer 1”) defer fmt.println(…

    2025年12月19日
    000
  • 发布了一个用于 JS/TS 异步进程同步执行的库

    我发布了一个名为sync-actions 的库,它允许异步进程在 javascript/typescript 中同步执行。特别是在 typescript 中,您可以以类型安全的方式调用定义的函数。它适用于您想要在您不希望(或不能)标记为异步的函数中执行异步进程的情况。 特征 利用 node.jswo…

    2025年12月19日
    000
  • JavaScript 循环综合指南

    JavaScript 循环结构 这份指南将深入探讨 JavaScript 中各种循环结构及其用法,并附带示例代码。 1. for 循环 当循环次数已知时,for 循环是最佳选择。 语法: for (let i = 0; i < 10; i++) { // 代码块} 示例: for (let i…

    2025年12月19日
    000
  • 掌握 JavaScript 中的 JSON 处理:解析和字符串化

    JavaScript JSON 处理:解析与字符串化详解 JSON (JavaScript 对象表示法) 是一种轻量级的数据交换格式,易于人类阅读和编写,也易于机器解析和生成。JavaScript 内置方法可实现 JSON 字符串与 JavaScript 对象的相互转换。 1. 解析 JSON 字符…

    2025年12月19日
    000
  • JavaScript 中字符串操作综合指南

    javascript 中的字符串操作 字符串操作是 javascript 中文本处理的核心方面。 javascript 提供了一组丰富的内置方法和技术来处理和转换字符串。 1.创建字符串 javascript 中的字符串可以使用单引号 (‘)、双引号 (“) 或反引号(` 用…

    好文分享 2025年12月19日
    000
  • 我如何开始作为 MERN 堆栈开发人员的旅程

    简介: “我记得第一次遇到 MERN Stack 这个术语时——MongoDB、Express.js、React.js 和 Node.js。我不知道这些工具是什么,但我知道如果我能掌握它们,我就能够构建一些令人惊叹的网络应用程序。这是我如何从初学者到深入研究 MERN Stack 开发世界的故事。”…

    2025年12月19日
    000
  • 了解 Protocol Buffers:JSON 的快速替代方案

    在数据交换领域,json(javascript 对象表示法)一直是人们的最爱。它简单、易读,并且可以跨平台无缝运行。对于许多用例来说,json 已经“足够好”。但随着系统规模的扩大以及对速度和效率的需求的增加,json 基于文本的格式可能会成为瓶颈。 这就是 protocol buffers (pr…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信