首页 > 编程语言 >JavaScript中new操作符具体做了什么?手写new操作符

JavaScript中new操作符具体做了什么?手写new操作符

时间:2025-01-14 21:57:16浏览次数:3  
标签:console log JavaScript 操作符 返回值 new Foo 构造函数

做了什么?

1.创建一个空的对象

2.将空对象的原型指向构造函数的原型

3.将空对象作为构造函数的上下文(改变this指向)

4.对构造函数返回

代码

function Foo() {
  console.log(this);
  this.name = "张三";
  return [1, 2, 3];
}

const f = new Foo();
console.log(f); //空对象 Foo{}
console.log(Foo.prototype == f.__proto__); //原型  true
Foo(); //指向Window
new Foo(); //指向函数本身

console.log(new Foo()); //返回值为基本类型,忽略返回值,返回值为引用类型new就不管事了,返回引用类型

手写函数实现new操作符

function Fun(age, name) {
  this.age = age;
  this.name = name;
}

function created(fun, ...args) {
  var obj = {}; //创建空对象
  Object.setPrototypeOf(obj, fun.prototype); //将空对象的原型指向构造函数的原型
  var result = fun.apply(obj, args); //空对象的作为构造函数的上下文
  return result instanceof Object ? result : obj; //返回值为基本类型,忽略返回值,返回值为引用类型new就不管事了,返回引用类型
}
console.log(created(Fun, 18, "张三"));

标签:console,log,JavaScript,操作符,返回值,new,Foo,构造函数
From: https://blog.csdn.net/m0_73351190/article/details/145148347

相关文章

  • 【Javascript Day6】for循环练习及数组
    目录for循环练习数组1.构造数组2.字面量数组创建3.数组的遍历循环4.length的使用规则for循环练习按输入弹窗行数画菱形(奇偶皆可)varpro=prompt("请输入行数")varsum="";for(vari=1;i<=pro;i++){if(i<=parseInt((pro*1+1)/2)......
  • JavaScript ——节点操作
    节点操作1.创建节点document.createElement('节点')参数:标签名字符串。说明:这些元素原先不存在,是根据需求动态生成的,因此也称为动态创建元素节点。该方法会将创建好的对象作为返回值返回。2.创建文本document.createTextNode() 可以用来创建一个文本节点对象。参数:文......
  • JavaScript详解 ——函数
    1、函数的概念在JS里面,可能会定义非常多的相同代码或者功能相似的代码,这些代码需要大量重复使用函数:就是封装一段可被重复调用执行的代码块。通过代码块可以实现在需要的的重复使用,使用typeof检查一个函数对象时,会返回function函数的封装是把一个或者多个功能通过函数的方式......
  • 《 C++ 点滴漫谈: 二十 》内存的权杖:C++ new 和 delete 的致胜之道
    摘要本文全面探讨了C++中的new和delete关键字及其在动态内存管理中的核心作用。从基本概念到底层实现,本文详细分析了其工作机制,并揭示了动态内存管理中的常见问题与陷阱,如内存泄漏和空悬指针。为解决这些问题,现代C++提供了智能指针和STL容器等高效替代方案,同时本......
  • JavaScript基础01
    一、基本情况#1、介绍JavaScript是一门解释性的脚本语言,主要用来给HTML网页增加动态功能。通常的js是运行在浏览器环境下的,可以帮助我们去控制页面,实现丰富的功能。会有dom和bom的api去操作html文档和浏览器的一些功能。nodejs是运行在计算机环境下的。语法一样,但是因为环......
  • python bs4 selenium 查找a href=javascript:();的实际点击事件和url
    在使用BeautifulSoup和Selenium时,处理href="javascript:;"的链接需要一些额外的步骤,因为这些链接不直接指向一个URL,而是通过JavaScript代码来执行某些操作。这可能包括导航到另一个页面、触发模态窗口、显示/隐藏内容等。以下是如何使用Selenium来查找和处理这......
  • JavaScript函数:从基础到进阶拓展
    一、引言在前端开发的广袤领域中,JavaScript函数无疑是构建交互性与功能性的基石,其重要性如同搭建积木时的一块块基础组件。想象一下,我们在搭建一座宏伟的积木城堡,每个积木块都代表着一个函数,它们各司其职,有的负责构建城堡的主体结构,有的塑造独特的装饰细节。而函数的拓展,就......
  • JavaScript与服务器端框架Flask
    JavaScript与服务器端框架Flask基本概念和作用说明示例一:设置基本的Flask环境示例二:使用JavaScript发起请求功能使用思路及代码示例示例三:处理POST请求示例四:表单验证与反馈开发经验分享在现代Web开发中,前端和后端的紧密结合对于创建高效、响应迅速的应用程序至关......
  • LeetCode热题100-两数相加【JavaScript讲解】
    题目:题解:根据题目(2->4->3)+(5->6->4)=(7->0->8),根据加法的计算过程我们知道首先从低位开始算起,也就是说应该先计算2+5=7;4+6=10,向前进一位,此处取余数0;3+4+进一位的1=8;所以答案是7->0->8。最关键的是最后的进位一定要记得,如果最后相加的和需要进位!!!解题代码:/***......
  • .NET 9 new features-Microsoft.ML.Tokenizers 库
    在.NET9中,微软引入了Microsoft.ML.Tokenizers库,为.NET开发者提供了强大的文本标记化功能。一、什么是Microsoft.ML.TokenizersMicrosoft.ML.Tokenizers是一个用于文本标记化的库,是.NET生态系统中的一个强大库旨在将文本转换为令牌(tokens)      以便......