详解Javascript中new()到底做了些什么?

详解Javascript中new()到底做了些什么?

new是Javascript中一个非常重要的关键字,它实际上是用来创建对象实例的。在使用new关键字创建对象实例的时候,new做了以下几件事情:

  1. 创建一个新的对象,并且将这个新的对象的原型链指向构造函数的原型对象。
  2. 将这个新的对象作为构造函数的上下文对象(this)来调用构造函数,并传递参数。
  3. 如果构造函数返回的值是一个对象,那么这个新的对象就会被直接返回,否则,就返回这个新的对象。

下面用一个简单实例来说明上面的过程:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

let person1 = new Person('Tom', 18);

在上述的代码中,我们创建了一个Person的构造函数,然后使用new关键字来创建一个新的Person对象实例。

在这个过程中,new做了以下几件事情:

  1. 创建一个新的对象实例,我们可以称之为person1
  2. person1的原型链指向Person.prototype,这样person1就可以访问Person.prototype中定义的属性和方法了。
  3. Person函数作为上下文对象(this)来调用,同时传递参数'Tom'18
  4. 在构造函数中,我们将参数'Tom'18分别赋值给了person1nameage属性。
  5. 新的对象实例person1被返回,也就是说,如果我们在Person构造函数中加上return语句,那么会直接返回这个return语句所指定的对象,而不是返回person1

接下来,我们再用一个稍微复杂一些的示例来进一步说明new关键字的执行过程。在这个示例中,我们将构造函数对象和原型对象分别保存在了变量中,以便于更好地理解。

let Animal = function(name, age) {
  this.name = name;
  this.age = age;
}

let AnimalPrototype = {
  speak: function() {
    console.log(this.name + ' is speaking!');
  }
}

Animal.prototype = AnimalPrototype;

let animal1 = new Animal('Bob', 2);
let animal2 = new Animal('Mike', 4);

animal1.speak(); // Bob is speaking!
animal2.speak(); // Mike is speaking!

首先,我们定义了一个Animal构造函数,并且将它的原型链指向了一个AnimalPrototype对象。然后,我们创建了两个Animal对象实例animal1animal2,并且分别调用了它们的speak方法。

在这个示例中,new关键字做了以下几件事情:

  1. 创建一个新的对象实例,我们可以称之为animal1
  2. animal1的原型链指向AnimalPrototype对象。
  3. Animal函数作为上下文对象(this)来调用,同时传递参数'Bob'2
  4. 在构造函数中,我们将参数'Bob'2分别赋值给了animal1nameage属性。
  5. 返回新的对象实例animal1
  6. 创建一个新的对象实例,我们可以称之为animal2
  7. animal2的原型链指向AnimalPrototype对象。
  8. Animal函数作为上下文对象(this)来调用,同时传递参数'Mike'4
  9. 在构造函数中,我们将参数'Mike'4分别赋值给了animal2nameage属性。
  10. 返回新的对象实例animal2
  11. 调用animal1animal2对象的speak方法,输出相应的结果。

通过这两个示例,我们可以更好地理解new关键字的执行过程以及它所做的事情。在日常开发中,我们会经常使用new关键字来创建对象实例,因此了解new的工作原理是非常重要的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Javascript中new()到底做了些什么? - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • Phpstudy2018 集成环境配置虚拟域名访问到Index Of 下

    概述 Phpstudy2018是一款常用的PHP集成环境,可以方便地在本地搭建PHP开发环境。本文将为您提供一份完整攻略,介绍如何在Phpstudy2018中配置虚拟域名访问到Index Of下的文件。 配置虚拟域名 步骤1:打开hosts文件 在Windows系统中,hosts文件位于C:\Windows\System32\drivers\etc目录下。使…

    other 2023年5月5日
    00
  • PostgreSQL 中字段类型varchar的用法

    PostgreSQL 中字段类型varchar的用法 什么是 varchar 在 PostgreSQL 中,varchar是一种用于存储可变长度字符的数据类型。varchar类型的字段能够存储最多1GB的数据,虽然在实际应用中,使用值范围更小的varchar(n)(n为最大长度)类型是更好的选择。 创建 varchar 字段 在创建 PostgreSQL 数…

    other 2023年6月25日
    00
  • 使用sxssfworkbook导出excel简例

    在Java中,使用SXSSFWorkbook类可以方便地导出Excel文件。以下是使用SXSSFWorkbook导出Excel文件的完整攻略: 1. 导入依赖 在使用SXSSFWorkbook导出Excel前,需要在项目中导入以下依赖: <dependency> <groupId>org.apache.poi</groupId&…

    other 2023年5月8日
    00
  • linux awk数组操作详细介绍

    Linux awk数组操作详细介绍 什么是awk awk是一种用于处理文本文件数据的命令行工具,在Linux或Unix系统中广泛使用。awk可以用于数据提取、数据转换、报告生成等多种任务。 什么是数组 数组是一种储存数据的数据结构,在awk中也经常用到。数组以下标和值的形式进行储存和访问。 声明数组 在awk中声明数组时,需要使用关键字array或[]。其中…

    other 2023年6月25日
    00
  • Android拍摄照片后返回缩略图的方法

    当使用Android拍摄照片后,可以通过以下步骤获取返回的缩略图: 首先,确保已经在AndroidManifest.xml文件中添加了相应的权限: <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" /> 在拍摄照片的Activ…

    other 2023年9月6日
    00
  • C语言菜鸟基础教程之自定义函数

    C语言菜鸟基础教程之自定义函数是一篇介绍如何在C语言中定义自己的函数的文章。 定义自定义函数的语法 定义自定义函数的语法如下: 返回类型 函数名(参数列表) { 函数体 } 其中, 返回类型:表示函数的返回值类型,可以是任意一种C语言的数据类型。 函数名:表示函数的名称,可以自定义。 参数列表:表示在调用函数时传递给函数的参数,可以是任意一种C语言的数据类型…

    other 2023年6月25日
    00
  • Spark内存调优指南

    一、Spark内存调优指南 在使用Spark过程中,内存调优是一个必须考虑的问题。正确的内存配置不仅可以提高应用程序执行的效率,还能避免一些应用程序错误。本攻略将提供一些Spark内存调优的技巧和最佳实践。 二、优化指南 存储级别的优化 在处理大数据时,Spark可能会从磁盘读取大量的数据,并将其缓存到内存中,以便后续快速访问。数据的存储级别可以通过调用ca…

    other 2023年6月27日
    00
  • 用python操作浏览器的三种方式

    当今,Python已成为最受欢迎的编程语言之一,它可以用于各种用途,包括自动化浏览器操作。在本攻略中我们将详细讲如何使用Python操作浏览器的三种方式,并提供两个示例说明。 三种方式 方式1:使用selenium库 selenium是流行的Python库,它允许我们自动化浏览器操作。使用selenium,我们可以模拟用户在浏器中的行为,点击链接、填写表单等…

    other 2023年5月8日
    00
合作推广
合作推广
分享本页
返回顶部