当前位置: 首页 > news >正文

深入理解js中的new关键字

在js中我们经常会使用到new关键字,那我们在使用new关键字的时候,new到底做了什么呢?今天我们就来深入探究一下

1.初步使用

我们先来使用一下,这是一个正常操作

    function Person() {this.name = "John";}let person = new Person();console.log(person.name); // John

new关键字主要做了这几件事情:

    1.创建一个新对象

    2.将构造函数的作用域赋值给新对象(this指向新对象)

    3.执行构造函数中的代码

    4.返回新对象

2.不使用new

那我们不使用new关键字,又会发生什么?

    function Person1() {this.name = "John1";}let p1 = Person1();console.log(p1); //undefinedconsole.log(name); //name  this指向window,所以输出John1

 3.构造函数有return

    function Person2() {this.name = "mike";return { age: 18 };}let p2 = new Person2();console.log(p2); //{age: 18}console.log(p2.name); //undefined

如果构造函数返回一个对象,new命令会直接返回这个return的对象

如果return的不是一个对象,那还是回按照new的实现步骤,返回实例对象

 4.手动实现new关键字

    function _new(fn, ...args) {if (typeof fn !== "function") {throw "fn must be a function";}// 创建一个对象,其对象的原型,指向构造函数的原型对象let obj = Object.create(fn.prototype);let res = fn.apply(obj, ...args);return res instanceof Object ? res : obj// 构造函数本身如果返回的是对象的话,则 返回的就是此对象// 如果返回值不是对象的话,则 返回对应的objreturn isObject || isFunction ? res : obj;}function Ele() {this.name = "Ele";}let e = _new(Ele)console.log(e.name); // Ele

如果你觉得本文对你有所帮助,欢迎评论,点赞与关注,一起卷~

http://www.lryc.cn/news/28513.html

相关文章:

  • RT-Thread Nano(2) - 线程
  • 真香,Grafana开源Loki日志系统取代ELK?
  • 机器学习|多变量线性回归 | 吴恩达学习笔记
  • 高并发内存池
  • springboot mybatis-plus 对接 sqlserver 数据库 批处理的问题
  • Acwing---843. n-皇后问题——DFS
  • Android事件分发机制
  • python版协同过滤算法图书管理系统
  • Redis基础入门
  • 【微服务】Feign实现远程调用和负载均衡
  • Windows使用QEMU搭建arm64 ubuntu 环境
  • NodeJS安装
  • Gin 优雅打印请求与回包内容
  • 关于k8s中ETCD集群备份灾难恢复的一些笔记
  • 【设计模式之美 设计原则与思想:设计原则】19 | 理论五:控制反转、依赖反转、依赖注入,这三者有何区别和联系?
  • 2023年全国最新高校辅导员精选真题及答案13
  • 【XXL-JOB】XXL-JOB定时处理视频转码
  • optuna用于pytorch的轻量级调参场景和grid search的自定义设计
  • 语法篇--汇编语言先导浅尝
  • 【ID:17】【20分】A. DS顺序表--类实现
  • 【java web篇】Tomcat的基本使用
  • MySQL实战解析底层---行锁功过:怎么减少行锁对性能的影响
  • 初识STM32单片机
  • 数据结构与算法系列之单链表
  • MySQL基础
  • 面试热点题:环形链表及环形链表寻找环入口结点问题
  • 【算法】DFS与BFS
  • 湖州银行冲刺A股上市:计划募资约24亿元,资产质量水平较高
  • 高性能网络I/O框架-netmap源码分析
  • SpringBoot监听机制-以及使用