返回顶部
首页 > 资讯 > 前端开发 > node.js >JS中new操作符有什么用
  • 385
分享到

JS中new操作符有什么用

2024-04-02 19:04:59 385人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关js中new操作符有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。new操作符的基本过程:1.创建一个新的空对象。2.将构造函数的作用域

这篇文章将为大家详细讲解有关js中new操作符有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

new操作符的基本过程:

1.创建一个新的空对象。

2.将构造函数的作用域赋给它(即this指向它)。

3.新对象增加构造函数的基本方法和属性。

4.返回新对象

上面的过程大家应该都熟悉,本文是重学 JS 系列的第一篇文章,写这个系列的初衷也是为了夯实自己的 JS 基础。既然是重学,肯定不会从零开始介绍一个知识点,如有遇到不会的内容请自行查找资料。

new 的作用

我们先来通过两个例子来了解 new 的作用

function Test(name) {
 this.name = name
}
Test.prototype.sayName = function () {
 console.log(this.name)
}
const t = new Test('yck')
console.log(t.name) // 'yck'
t.sayName() // 'yck'

从上面一个例子中我们可以得出这些结论:

  • new 通过构造函数 Test 创建出来的实例可以访问到构造函数中的属性

  • new 通过构造函数 Test 创建出来的实例可以访问到构造函数原型链中的属性,也就是说通过 new 操作符,实例与构造函数通过原型链连接了起来

但是当下的构造函数 Test 并没有显式 return 任何值(默认返回 undefined),如果我们让它返回值会发生什么事情呢?

function Test(name) {
 this.name = name
 return 1
}
const t = new Test('yck')
console.log(t.name) // 'yck'

虽然上述例子中的构造函数中返回了 1,但是这个返回值并没有任何的用处,得到的结果还是和之前的例子完全一样。

那么通过这个例子,我们又可以得出一个结论:

  • 构造函数如果返回原始值(虽然例子中只有返回了 1,但是你可以试试其他的原始值,结果还是一样的),那么这个返回值毫无意义

试完了返回原始值,我们再来试试返回对象会发生什么事情吧

function Test(name) {
 this.name = name
 console.log(this) // Test { name: 'yck' }
 return { age: 26 }
}
const t = new Test('yck')
console.log(t) // { age: 26 }
console.log(t.name) // 'undefined'

通过这个例子我们可以发现,虽然构造函数内部的 this 还是依旧正常工作的,但是当返回值为对象时,这个返回值就会被正常的返回出去。

那么通过这个例子,我们再次得出了一个结论:

  • 构造函数如果返回值为对象,那么这个返回值会被正常使用

这两个例子告诉了我们一点,构造函数尽量不要返回值。因为返回原始值不会生效,返回对象会导致 new 操作符没有作用。

通过以上几个例子,相信大家也大致了解了 new 操作符的作用了,接下来我们就来尝试自己实现 new 操作符。

自己实现 new 操作符

首先我们再来回顾下 new 操作符的几个作用

  • new 操作符会返回一个对象,所以我们需要在内部创建一个对象

  • 这个对象,也就是构造函数中的 this,可以访问到挂载在 this 上的任意属性

  • 这个对象可以访问到构造函数原型上的属性,所以需要将对象与构造函数链接起来

  • 返回原始值需要忽略,返回对象需要正常处理

回顾了这些作用,我们就可以着手来实现功能了

function create(Con, ...args) {
 let obj = {}
 Object.setPrototypeOf(obj, Con.prototype)
 let result = Con.apply(obj, args)
 return result instanceof Object ? result : obj
}

这就是一个完整的实现代码,我们通过以下几个步骤实现了它:

  • 首先函数接受不定量的参数,第一个参数为构造函数,接下来的参数被构造函数使用

  • 然后内部创建一个空对象 obj

  • 因为 obj 对象需要访问到构造函数原型链上的属性,所以我们通过 setPrototypeOf 将两者联系起来。这段代码等同于 obj.__proto__ = Con.prototype

  • 将 obj 绑定到构造函数上,并且传入剩余的参数

  • 判断构造函数返回值是否为对象,如果为对象就使用构造函数返回的值,否则使用 obj,这样就实现了忽略构造函数返回的原始值

接下来我们来使用下该函数,看看行为是否和 new 操作符一致

function Test(name, age) {
 this.name = name
 this.age = age
}
Test.prototype.sayName = function () {
 console.log(this.name)
}
const a = create(Test, 'yck', 26)
console.log(a.name) // 'yck'
console.log(a.age) // 26
a.sayName() // 'yck'

关于“JS中new操作符有什么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: JS中new操作符有什么用

本文链接: https://lsjlt.com/news/79094.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS中new操作符有什么用
    这篇文章将为大家详细讲解有关JS中new操作符有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。new操作符的基本过程:1.创建一个新的空对象。2.将构造函数的作用域...
    99+
    2024-04-02
  • JavaScript中new操作符有什么用
    这篇文章给大家分享的是有关JavaScript中new操作符有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 js模拟new操作符的实现这个问题如果你在掘金上搜,...
    99+
    2024-04-02
  • 怎么使用JS中new操作符
    这篇文章主要讲解了“怎么使用JS中new操作符”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用JS中new操作符”吧!首先我们来看一下实例化一个对象做...
    99+
    2024-04-02
  • JavaScript中new操作符的作用是什么
    这篇文章给大家介绍JavaScript中new操作符的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript的特点1.JavaScript主要用来向HTML页面添加交互行为。2.JavaScrip...
    99+
    2023-06-06
  • js逻辑操作符有什么用
    这篇文章主要为大家展示了“js逻辑操作符有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js逻辑操作符有什么用”这篇文章吧。1、逻辑操作符与,由两个‘&’字符组成(&&am...
    99+
    2023-06-25
  • 如何在JavaScript中使用new操作符
    本篇文章给大家分享的是有关如何在JavaScript中使用new操作符,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、说明(1)创建一个空对象。(2)将对象的__proto指...
    99+
    2023-06-15
  • C++中new运算符有什么用
    C++中的new运算符用于动态分配内存空间,它会在堆(即自由存储区)中分配一块内存,并返回该内存的地址。使用new运算符可以创建一个...
    99+
    2023-10-19
    C++
  • C#中new操作符的工作机制
    使用new操作符来创建对象,其背后到底发生了什么? 有一个父类Animal,Dog派生于Animal。 class Program { static ...
    99+
    2024-04-02
  • JavaScript中instanceof操作符有什么用
    JavaScript中instanceof操作符有什么用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在JavaScript中...
    99+
    2024-04-02
  • JavaScript中的new操作符的具体使用
    JavaScript中的new操作符是一个非常重要的概念,它可以让我们创建一个自定义的对象类型或者一个内置的对象类型,比如Array、Date、Function等。那么,new操作符...
    99+
    2023-05-18
    JavaScript new操作符 js new运算符
  • C#中new修饰符的作用是什么
    C#中new修饰符的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C# new修饰符是起什么作用?◆C# new修饰符与 new 操作符是两个概念;◆C# new...
    99+
    2023-06-17
  • JS 中 new 的作用详细
    目录1、举例2、制造一百个士兵3、质疑4、改进5、优雅?6、JS 之父的关怀7、这一次我们用 new 来写8、注意 constructor 属性简介: 大部分讲 new 的文章会从...
    99+
    2024-04-02
  • MySQL中UNION操作符有什么用
    这篇文章给大家介绍MySQL中UNION操作符有什么用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MySQL UNION 操作符用于连接两个以上的 SELECT...
    99+
    2024-04-02
  • JS中强大的操作符有哪些
    本篇内容主要讲解“JS中强大的操作符有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中强大的操作符有哪些”吧!1. 数值分割符 _ES2021 引入了数...
    99+
    2024-04-02
  • PHP有什么操作符
    这篇文章给大家分享的是有关PHP有什么操作符的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。先来谈谈PHP,在程序设计的世界里每天都有一场不被承认的战争发生。它是一场在普通人和计算机科学家之间的战争。它是一场发生在...
    99+
    2023-06-17
  • Javascript中new()有什么用
    小编给大家分享一下Javascript中new()有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!要创建 Person 的...
    99+
    2024-04-02
  • JavaScript中new有什么用
    这篇文章给大家分享的是有关JavaScript中new有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为了保证可读性,本文采用意译而非直译。当你使用new的时候,会:创建一...
    99+
    2024-04-02
  • js中new Date()怎么用
    这篇文章主要介绍了js中new Date()怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。js new Date() 测试var&nb...
    99+
    2024-04-02
  • c++中new运算符的作用
    new 运算符用于在运行时从堆中动态分配内存并创建对象,返回一个指向新创建对象的内存地址的指针,特点包括延迟对象创建、可变大小分配、在堆上分配和需要手动释放内存。 C++ 中 new ...
    99+
    2024-04-28
    c++
  • js如何使用!!操作符
    小编给大家分享一下js如何使用!!操作符,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用 !! 操作符!! 运算符可用于将表达式的结果快速转换为布尔值(true...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作