首页 > 其他分享 >50.new操作符具体干了什么呢如何实现

50.new操作符具体干了什么呢如何实现

时间:2023-07-14 23:12:48浏览次数:35  
标签:对象 50 操作符 result newObject constructor new prototype

50. new 操作符具体干了什么呢?如何实现?

// (1)首先创建了一个新的空对象
// (2)设置原型,将对象的原型设置为函数的 prototype 对象。
// (3)让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)
// (4)判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。

// 实现:

function objectFactory() {
  let newObject = null,
    constructor = Array.prototype.shift.call(arguments),
    result = null;

  // 参数判断
  if (typeof constructor !== "function") {
    console.error("type error");
    return;
  }

  // 新建一个空对象,对象的原型为构造函数的 prototype 对象
  newObject = Object.create(constructor.prototype);

  // 将 this 指向新建对象,并执行函数
  result = constructor.apply(newObject, arguments);

  // 判断返回对象
  let flag =
    result && (typeof result === "object" || typeof result === "function");

  // 判断返回结果
  return flag ? result : newObject;
}

// 使用方法
// objectFactory(构造函数, 初始化参数);

详细资料可以参考:
《new 操作符具体干了什么?》
《JavaScript 深入之 new 的模拟实现》

标签:对象,50,操作符,result,newObject,constructor,new,prototype
From: https://www.cnblogs.com/zhuoss/p/17555297.html

相关文章

  • 刷力扣高频SQL50题(基础)总结
    此随笔仅总结个人刷SQL题时,突然不会使用的某函数或某方法,大佬勿看勿喷regexp'正则表达式'一般用于邮箱校验例题:查找拥有有效邮箱的用户select*fromuserswheremailregexp'^[a-zA-Z]+[a-zA-Z0-9_\\./\\-]*@leetcode\\.com$'窗口函数窗口函数讲解函数+over(pa......
  • scrapy用法举例 (Scrapy爬取豆瓣电影Top250)
    Scrapy是一个Python的爬虫框架,用于快速开发和部署Web爬虫。它提供了一套完整的爬虫工具,包括爬虫的调度、数据下载、数据处理和存储等功能,同时也支持多线程、分布式和异步IO等高级特性。以下是Scrapy的用法介绍:1.安装ScrapyScrapy可以通过pip安装,命令如下:pipinstal......
  • P5044 [IOI2018] meetings 会议 思考--zhengjun
    在NFLS模拟赛上遇到的,赛后订正过的。隔了蛮长时间的,总结一下。首先转化为笛卡尔树上后缀前缀的问题。然后考虑如何转移,发现转移形如\(f(x)=\min\{f(x)+C,kx+b\}\)的形式。可以直接线段树维护每个点的最优直线,在update的时候:如果\(f(x)+C\lekx+b\)恒成立(左右......
  • java导出数据太大导致502
    解决"java导出数据太大导致502"问题的步骤首先,让我们来了解一下整个问题的流程。当我们在Java中导出大量数据时,有时候会遇到502错误。这是由于服务器在处理大量数据时超过了其处理能力所导致的。为了解决这个问题,我们可以采取以下步骤:步骤描述1查询数据2将数据导出......
  • 操作符
    ①算数操作符+-* /移位操作符<<左移>>右移位操作符&按位取反|按位或^按位异或#include<stdio.h>intmain(){ inta=1; intb=a<<2; printf("%d\n",b); return0;}②按位左移的例子#include<stdio.h>intmain(){ inta=1; intb=a<&l......
  • .NET 7发布到IIS HTTP 错误 500.19 - Internal Server Error
    之前一直都是用的独立发布,就没有配置过服务器环境,今天发布了一个依赖版,果不其然报错了一番查找之后原因也是很简单,服务器需要安装一个.NET运行时的环境https://dotnet.microsoft.com/zh-cn/download/dotnet/7.0打开之后下载这一个,你也可以选择下载左边的SDK,里面是包含了.NET运......
  • QOJ 6504. CCPC Final 2022 D Flower's Land 2题解
    QOJ6504.CCPCFinal2022DFlower'sLand2题解题意简述给你一个只含\(0,1,2\)的序列,相邻两个相同的数字可以直接消掉。询问包含两种区间所有数\(+1\)并对\(3\)取模。求一段区间能否用上述消除方式消完。样例输入8901211012245236168168236......
  • IPQ5018 SoC with QCN9074 VS QCN6122|IIOT Wifi6 solution|Wallys
    IPQ5018SoCwithQCN9074VSQCN6122|IIOTWifi6solution|WallysIntheeraofIndustry4.0,reliableandefficientwirelessconnectivityiscrucialforindustrialandenterpriseapplications. That'swhereWallyscomesinwithourcutting-edgeCost-Effe......
  • newcoder61132F <结论:排序最小交换次数>
    题目松鼠排序n个不同的数,任意交换位置进行排序,其最小交换次数。思路结论:\(最小交换次数=n-r\),其中\(r\)为置换环个数。参考:https://www.cnblogs.com/CDOI-24374/p/16410082.html代码Code#include<iostream>#include<algorithm>#include<vector>#include<cstrin......
  • newcoder61132L <multiset 维护中位数>
    题目中位数多次询问,每次修改数组中一个数,问修改后n个数的中位数思路使用multiset,分别维护数组的较大的\(n/2+1\)个和较小的\(n/2\)个;根据数据范围,或许可用线段树+二分...代码Code#include<iostream>#include<algorithm>#include<vector>#include<cstring>......