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

相关文章

  • miui6官网提供下载地址

    MIUI 6官网提供下载地址攻略 MIUI 6是小米公司推出的一款基于Android系统的操作界面。如果你想下载MIUI 6,可以通过官方网站获取下载地址。下面是详细的攻略过程: 步骤一:打开MIUI 6官网 首先,打开你的浏览器,输入MIUI 6的官方网址:https://www.miui.com/。 步骤二:进入下载页面 在官网首页,你可以找到一个名为“…

    other 2023年8月4日
    00
  • 安装中文版chrom、ium

    安装中文版Chromium Chromium是一款开源浏览器,由Google Chrome基于Chromium项目开发而来,其拥有相同的核心功能。在这篇文章中,我们将介绍如何安装中文版的Chromium。 步骤1:下载Chromium 首先,要访问官方网站来下载Chromium。你可以打开Chromium官网并下载最新的Chrome浏览器。 步骤2:从官网下…

    其他 2023年3月28日
    00
  • C语言数据结构中二分查找递归非递归实现并分析

    C语言数据结构中二分查找递归及非递归实现 二分查找基本原理 二分查找(Binary Search)是一种基于比较目标值和中间元素的教科书式算法。每次查找都将查找范围缩小一半,直到找到目标值为止,或发现查找范围已经为空。 二分查找前提条件 在使用二分查找之前,我们需要满足以下两个前提条件: 数组必须是有序的。 数组需要支持随机访问,也就是支持索引。 二分查找的…

    other 2023年6月27日
    00
  • 魔兽世界8.0法师什么特质好 8.0法师最佳属性与特质推荐

    魔兽世界8.0法师最佳属性与特质推荐 作为魔兽世界里非常重要的职业之一,法师在8.0版本中的属性与特质选择至关重要。下面就为大家介绍8.0版本法师的最佳属性与特质推荐。 1. 属性选择 在8.0版本中,法师最重要的三个属性分别为智力、暴击和急速。 智力是法师最主要的属性,它能够提升法术的伤害和治疗效果。暴击是法师的爆发属性,它能够提高法术的暴击率和暴击伤害。…

    other 2023年6月27日
    00
  • Win7右键菜单只显示一部分内容如何全部显示

    Win7右键菜单只显示一部分内容如何全部显示 问题描述 在Windows 7操作系统中,有时我们会发现右键菜单只显示一部分内容,如果我们想要查看所有的内容,需要再次点击“展开”才可以。这样会导致操作不便,所以我们需要解决这一问题。 解决方案 在Windows 7中,右键菜单中的内容是保存在注册表中的。因此,我们可以通过修改注册表来解决这一问题。下面是具体的步…

    other 2023年6月27日
    00
  • Win11蓝屏笑脸提示重启原因怎么办 ?Win11蓝屏重启原因以及解决方法

    以下是详细讲解Win11蓝屏问题的攻略,该攻略将涵盖相关的重启原因以及解决方法。 Win11蓝屏问题 首先,Win11蓝屏问题可能由多种原因引起,例如系统文件损坏、驱动程序冲突、硬件问题等等。当出现蓝屏问题时,通常会出现笑脸提示和错误代码。为了解决这个问题,我们需要对错误代码进行分析,并采取相应的措施。 在Win11系统中,蓝屏问题通常采用以下形式进行提示:…

    other 2023年6月27日
    00
  • vue-cli3.0 环境变量与模式配置方法

    下面是详细的讲解。 什么是环境变量和模式 在开发中,我们需要根据不同的环境和需求来进行不同的配置,比如在开发环境和测试环境中使用不同的 apiUrl,或者在不同的模式下加载不同的配置文件。 vue-cli3.0 提供了非常便捷的配置方法来实现这些需求,分别是环境变量和模式。 环境变量: 在 vue-cli3.0 中,环境变量默认有三个:development…

    other 2023年6月27日
    00
  • sla(服务等级协议)

    SLA(服务等级协议) 服务等级协议(Service Level Agreement,简称 SLA),是指为了确保客户获得的服务达到一定的标准而与客户签订的协议。这个协议包含了关于服务提供商能够提供的服务级别、服务时间、故障处理和补救措施等方面的信息。 为什么需要 SLA? SLA 是一个保证服务质量的工具,为客户和服务提供商之间建立了一种透明度,以保障客户…

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