浅谈js中Object.create()与new的具体实现与区别

yizhihongxing

浅谈js中Object.create()与new的具体实现与区别

Object.create() vs new

在 JavaScript 中,我们可以使用两种方法来创建对象:Object.create() 和 new 关键字。它们的区别如下:

  • 使用 new 关键字创建的对象是一个新的实例,而使用 Object.create() 创建的对象是继承自另一个对象的实例。
  • 使用 new 关键字创建的实例具有一个构造函数,而 Object.create() 创建的实例没有。

Object.create()

Object.create() 方法是ES5引入的一个方法,用于创建一个新的对象,这个对象的原型链指向传入的第一个参数。

语法如下:

Object.create(proto, [propertiesObject])

该方法接收两个参数。

参数 proto 是新对象的原型(必须参数)。传入一个对象,新建对象成为传入对象的原型链上的子代。

参数 propertiesObject 是一个可选的对象,表示为新对象定义新属性时的描述符对象。

示例1:

let person = {
  name: 'Tom',
  age: 18
}

let student = Object.create(person, {
  gender: {
    value: 'male'
  }
})

console.log(student.name)    // Tom
console.log(student.age)     // 18
console.log(student.gender)  // male

在这个示例中,我们创建了一个 person 对象,然后使用 Object.create() 创建了一个新的 student 对象,该对象的原型是 person 对象。所以 student 对象继承了 person 对象的所有属性和方法。

同时,在使用 Object.create() 时,我们还可以传入一个对象,对象中定义的新属性具有属性描述符。

示例2:

let fruit = {
  color: 'red'
}

let apple = Object.create(fruit, {
  name: {
    value: 'apple',
    writable: true,
    enumerable: false,
    configurable: true
  }
})

console.log(apple.name)  // apple
console.log(apple.color) // red

在这个示例中,我们创建了一个 fruit 对象,然后使用 Object.create() 创建了一个新的 apple 对象,该对象的原型是 fruit 对象。在传入的第二个参数中,我们定义了 name 这个新属性,同时对其进行了属性描述符的配置。

new

new 关键字用于调用构造函数来创建一个新对象。构造函数会自动返回一个新建的对象。

语法如下:

let obj = new Constructor([argument0[, argument1[, ...argumentN]]]);

示例:

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

let person = new Person('Tom');
console.log(person.name);  // Tom

在这个示例中,我们定义了一个 Person 构造函数,并使用 new 关键字创建了一个新对象 person

总结

  • Object.create() 方法创建的对象是继承自另一个对象的实例,而 new 关键字创建的对象是一个新的实例。
  • Object.create() 方法创建的对象没有构造函数,而 new 关键字创建的对象具有构造函数。
  • 在使用 Object.create() 时,可以传入一个对象,该对象用来定义新属性的属性描述符。
  • new 调用的是构造函数,构造函数里面的 this 指向新创建的对象。

希望这篇文章能让你更好地理解 Object.create()new 的区别,并能够更好地使用它们来创建对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈js中Object.create()与new的具体实现与区别 - Python技术站

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

相关文章

  • 手把手教你Vue3如何封装组件

    标题:手把手教你Vue3如何封装组件 1. 确定组件功能和需求 在封装组件之前,需要明确组件的功能和需求。这里我们以一个基础的计数器组件为例,具体的需求包括: 组件中包含一个按钮和一个显示计数器值的标签。 点击按钮可以实现加1操作。 可以设置计数器的初始值。 可以设置计数器的最大值,当计数器值达到最大值时,不能再进行加1操作。 2. 创建组件 在确定了组件的…

    other 2023年6月25日
    00
  • javascript运算符的优先级

    JavaScript运算符的优先级 在JavaScript中,运算符根据优先级执行。如果有多个运算符在同一表达式中使用,那么优先级高的运算符将在优先级低的运算符之前执行。如果你不了解运算符的优先级,很可能会导致程序出现意想不到的结果。 JavaScript中的运算符根据它们执行的操作类型不同,可以分为以下几类: 算术运算符 比较运算符 逻辑运算符 位运算符 …

    其他 2023年3月28日
    00
  • Java设计模式之责任链模式的示例详解

    Java设计模式之责任链模式的示例详解 什么是责任链模式 责任链模式是一种行为型设计模式,设计思路是将一个请求同一个处理的对象组成一条链,当请求在链上不断传递并处理直到被处理完毕。责任链模式可以避免请求的直接发起者和接受者之间的耦合关系,同时使得请求可以被多个对象依次进行处理。 如何实现责任链模式 责任链模式包含两个重要的角色:抽象处理者和具体处理者。抽象处…

    other 2023年6月27日
    00
  • Windows 10 10162 64位/32位IOS镜像下载 RTM前最后一版

    很抱歉,但我无法提供关于非法软件下载的指导或支持。我鼓励您遵守软件许可协议和法律法规,以合法的方式获取软件。如果您有任何其他问题或需要其他帮助,请随时告诉我。

    other 2023年7月28日
    00
  • gson的学习与使用

    Gson的学习与使用 Gson是一个Google开发的用于将Java对象转换为JSON格式并反向转换的库,支持复杂对象的序列化和反序列化。它简单易用,提供丰富的API,能够支持大多数的Java对象转换为Json的需求。 安装Gson Gson库可以从Maven中心仓库或Github下载安装。 Maven添加依赖 <dependency> <…

    其他 2023年3月28日
    00
  • python:将numpy数组数据类型从int64转换为int

    Python: 将NumPy数组数据类型从int64转换为int 在Python中,NumPy是一个常用的数值计算库,它提供了一个强大的数组对象。有时候,我们需要将NumPy数组的数据类型从int64转换为int。以下是关于Python: 将NumPy数组数据类型从int64转换为int的完整攻略,包括常见问题和两个示例说明。 常见问题 1. 什么是NumP…

    other 2023年5月9日
    00
  • Linux环境中使用BIEE 连接SQLServer业务数据源

    当在Linux操作系统下使用BIEE连接SQLServer业务数据源时,需要通过配置ODBC连接、安装Microsoft ODBC SQL Server Driver软件以及配置BIEE数据源来实现。下面是具体步骤: 配置ODBC连接 1.安装unixODBC:在Linux系统中通过命令行执行sudo apt-get install unixodbc安装un…

    other 2023年6月27日
    00
  • numpy基础一

    numpy基础一 NumPy是Python科学计算中非常重要的库之一,它提供了高效率的N维数组对象,以及一系列用于处理这些数组的函数。本篇文章将介绍一些NumPy的基础知识,包括如何安装NumPy,创建数组和进行基本的数组操作等。 安装NumPy 在使用NumPy之前,我们需要先把它安装到电脑上。有多种方法可以安装NumPy,这里介绍其中的一种。假设你已经安…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部