js构造函数创建对象是否加new问题

当使用 JavaScript 构造函数创建对象时,可以选择是否使用 new 关键字。如果使用了 new 关键字,则会创建一个新的对象并将其绑定到 this 上,最后返回这个新的对象。如果没有使用 new 关键字,则 this 被绑定到全局对象上,这可能导致一些意外的问题。

下面给出两个示例展示使用和不使用 new 关键字的区别。

示例一

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

var person1 = new Person('John');
console.log(person1.name);  // 输出 "John"

var person2 = Person('Jane');
console.log(person2);  // 输出 "undefined"
console.log(name);  // 输出 "Jane"

上述代码定义了一个 Person 构造函数,它接受一个名为 name 的参数,并将其储存在对象的 name 属性中。

在第一个调用中,我们使用了 new 关键字创建了一个新的 Person 对象,并将其储存在变量 person1 中,因此 person1.name 返回了正确的值。

在第二个调用中,我们没有使用 new 关键字创建对象,而是直接调用了 Person 函数,此时 this 绑定到了全局对象上,因此 person2undefined,并且 name 变量被设置为了 'Jane'

示例二

function Dog(name) {
  if (this instanceof Dog) {
    this.name = name;
  } else {
    throw new Error('必须使用 new 关键字创建对象');
  }
}

var dog1 = new Dog('旺财');
console.log(dog1.name);  // 输出 "旺财"

var dog2 = Dog('小黄');

上述代码定义了一个 Dog 构造函数,如果它被调用时 this 绑定到 Dog,则会将 name 储存在对象的属性中,否则将抛出一个错误提示必须使用 new 关键字创建对象。

在第一个调用中,我们使用了 new 关键字创建了一个新的 Dog 对象,并将其储存在变量 dog1 中,因此 dog1.name 返回了正确的值。

在第二个调用中,我们没有使用 new 关键字创建对象,因此会抛出一个错误提示必须使用 new 关键字创建对象。

综上所述,使用 new 关键字创建对象可以避免很多意外的问题。因此,建议使用 new 关键字来创建对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js构造函数创建对象是否加new问题 - Python技术站

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

相关文章

  • Javascript Date toLocaleTimeString() 方法

    以下是关于JavaScript Date对象的toLocaleTimeString()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的toLocaleTimeString()方法 JavaScript的toLocaleTimeString()方法返回一个表示对象时间部分本地化字符串,该字符串格式根据本地设置而定。该方法可以接受一个或多…

    JavaScript 2023年5月11日
    00
  • js实现内容显示并使用json传输数据

    让我来详细讲解一下”JS实现内容显示并使用JSON传输数据”的攻略。 什么是JSON JSON(JavaScript Object Notation),是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON采用键值对(key-value)的方式表示数据,是当今最常用的一种数据格式之一。 JS实现内容显示 使用JS实现内容显示有很多方…

    JavaScript 2023年5月27日
    00
  • 浅谈js的html元素的父节点,子节点

    当我们在编写 JavaScript 代码时,我们经常需要对 HTML 页面中的元素进行操作,而理解 HTML 元素的父节点和子节点是非常重要的。在本文中,我们将深入讨论这个话题并为您提供完整攻略。 HTML 元素的父节点和子节点 在 HTML 中,父节点表示该节点的上一级节点,而子节点是该节点的下一级节点。例如,如果我们有一个 div 元素,它包含一个 p …

    JavaScript 2023年6月10日
    00
  • JavaScript写个贪吃蛇小游戏(超详细)

    下面是“JavaScript写个贪吃蛇小游戏(超详细)”的完整攻略。 1. 准备工作 在开始编写贪吃蛇游戏前,我们需要准备以下工具和资源: 一个编辑器,比如VSCode。 一些基础的HTML、CSS和JS知识。 贪吃蛇游戏的素材,可以从互联网上下载。 2. 游戏介绍 贪吃蛇游戏是经典的像素游戏之一,游戏规则很简单:玩家控制蛇的移动,蛇吃到食物后会变长,玩家需…

    JavaScript 2023年5月28日
    00
  • JavaScript程序中的流程控制语句用法总结

    流程控制语句是JavaScript编程中非常重要的一部分,它用于根据条件执行特定的代码。在本文中,我们将深入讨论JavaScript程序中的流程控制语句的用法汇总。 条件语句 if语句 if语句是JavaScript最常见的条件语句。它允许根据一个条件来执行代码块,同时,它可以与else语句结合使用,以提供一些备选的行为。 if语句的基本语法如下: if (…

    JavaScript 2023年5月27日
    00
  • js时间控件只显示年月

    针对这个问题,以下是我给出的完整攻略。 1. 使用现成的时间控件库 使用现成的时间控件库是最为简单的方法之一,常用的时间控件库有datepicker.js和laydate.js。 下面是 laydate.js 的简单例子,使用时只需要引入laydate.js和laydate.css即可。 <!DOCTYPE html> <html> …

    JavaScript 2023年5月27日
    00
  • JSON中key动态设置及JSON.parse和JSON.stringify()的区别

    JSON中key动态设置指的是在JavaScript中向JSON对象动态添加属性名(key),这样的JSON对象在另一个需要使用这些属性的函数或者方法中外部作用域仍然可以进行访问。但在正常情况下,我们无法使用字符串拼接的方式来动态设置JSON中的key,这时候就需要借助ES6中的计算属性名(Computed Property Names)来实现。 计算属性名…

    JavaScript 2023年5月27日
    00
  • js动画效果制件让图片组成动画代码分享

    下面是关于“js动画效果制件让图片组成动画代码分享”的完整攻略。 一、什么是JS动画效果制件 JS动画效果制件是一种用JavaScript创建动画效果的工具,它可以帮助用户更轻松、更高效地制作出丰富多彩的动画效果,同时可以通过代码进行完全自定义。 常见的JS动画效果制件包括jQuery中的animate()方法、GreenSock Animation Pla…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部