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

浅谈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日

相关文章

  • 易语言的数据类型整理

    易语言的数据类型整理攻略 易语言是一种广泛使用的编程语言,它拥有多种数据类型,包括基本数据类型和复合数据类型。在进行编程时,我们需要使用不同的数据类型来存储和操作数据。本文将详细介绍易语言的数据类型,包括定义、使用、转换等内容。 基本数据类型 易语言的基本数据类型包括整型、单精度浮点型、双精度浮点型、布尔型和字符串型。 整型 定义整型变量: Dim intV…

    other 2023年6月27日
    00
  • 内存不足怎么办如何解决内存不足的问题

    解决内存不足的问题攻略 1. 释放内存空间 当内存不足时,首先要尝试释放已占用的内存空间。以下是一些常见的方法: 关闭不必要的程序和进程:打开任务管理器(Windows)或活动监视器(Mac),查看哪些程序和进程占用了大量的内存资源。关闭不必要的程序和进程可以释放内存空间。 清理临时文件:临时文件可能会占用大量的内存空间。使用磁盘清理工具(如Windows的…

    other 2023年8月1日
    00
  • 32位老苹果设备怎么越狱?iOS9.1-9.3.4的Trident越狱工具使用教程

    32位老苹果设备越狱攻略:iOS 9.1-9.3.4 1. 准备工作 在开始越狱之前,请确保你已经完成以下准备工作:- 一台32位老苹果设备,运行iOS 9.1-9.3.4版本。- 一台运行Windows或Mac OS的电脑。- 最新版本的iTunes已经安装在你的电脑上。- 一个可用的USB数据线。 2. 下载Trident越狱工具 Trident是一款专…

    other 2023年7月28日
    00
  • secedit.exe本地安全策略命令使用方法

    下面就是“secedit.exe本地安全策略命令使用方法”的完整攻略,希望可以帮到你。 1. 什么是secedit.exe? secedit.exe是Windows系统中自带的命令行工具,可以用于管理本地安全策略。我们可以使用它来修改本地安全策略,如账户密码策略、账户锁定策略、用户权限等。 2. secedit.exe命令语法 可以使用以下命令获取seced…

    other 2023年6月26日
    00
  • 微信小程序onload函数

    微信小程序是一种轻量级的应用程序,它可以在微信中运行。在开发微信小程序时,我们需要使用onLoad函数来初始化页面数据。本文将详细讲解onLoad的完整攻略,并提供两个示例说明。 onLoad函数的基本用法 onLoad函数是微信小程序中生命周期函数之一,它在页面加载时被调用。我们可以在onLoad函数中初始化页面数据,例如从服务器获取数据、设置页面标题等。…

    other 2023年5月10日
    00
  • 大容量的U盘该选择哪一种文件系统格式比较好

    当我们选择U盘的文件系统格式时,应该考虑U盘的容量大小、使用场景、操作系统支持等因素。下面是选择U盘文件系统格式的完整攻略: 1.了解U盘的容量大小和使用场景 U盘的容量通常有8GB、16GB、32GB、64GB等不同规格。如果使用U盘作为文件传输的工具,通常需要存储大量的文件,特别是视频等大文件,因此需要选择支持大容量的文件系统格式。如果使用U盘做系统安装…

    other 2023年6月27日
    00
  • Win11初始化此电脑下载时出现问题无法下载的解决方法

    针对“Win11初始化此电脑下载时出现问题无法下载的解决方法”,我来给你详细的攻略: 问题描述 在安装或升级Windows 11时,有些用户可能遇到“此电脑”无法下载的问题。具体表现为安装程序在进行初始化时会出现错误,并提示“出现问题无法下载”。 解决方法 方法一:使用Windows Update来升级 如果你想升级到Windows 11,推荐使用Windo…

    other 2023年6月20日
    00
  • 洛谷pP2708 硬币翻转

    下面是“洛谷P2708 硬币翻转”的完整攻略,包括题目描述、解题思路和两个示例等方面。 题目描述 有一个 $n\times m$ 的矩阵,每个格子上有一个硬币,正面朝上或者反面朝上。现在你可以进行以下操作: 将第 $i$ 行的硬币全部翻转。 将第 $j$ 列的硬币全部翻转。 问最少需要进行多少次操作,才能使得所有硬币都正面朝上。 解题思路 对于这道题目,我们…

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