首页 > 编程语言 >JavaScript new一个对象的详细过程

JavaScript new一个对象的详细过程

时间:2024-03-29 17:30:52浏览次数:29  
标签:__ 详细 age JavaScript mxin constructor new name

JavaScript new一个对象的详细过程 new实现过程 new实现原理 new手写实现

实现过程/原理

  1. 开辟一块内存,创建一个空对象

  2. 执行构造函数对这个空对象进行构造

  3. 给空对象添加__proto__属性

  4. 调用函数改变this指向

  5. 最后返回this指向的新对象(如果是引用类型则返回引用类型,否则返回Objective)

手写

/**
 * 模拟 new
 * @param {function} constructor
 * @param  {...any} args
 * @returns {object}
 */
function __new(constructor, ...args) {
    if (typeof constructor !== 'function') throw new TypeError('Error')

    // 创建一个空对象,指定原型为constructor.prototype
    const obj = Object.create(constructor.prototype)

    // 执行构造函数,绑定this
    const result = constructor.apply(obj, args)

    // 如果构造函数返回值是一个对象,那么返回该对象, 如果没有就返回 obj
    return result && result instanceof Object ? result : obj
}

// ------------------------------ 测试 ------------------------------

function Person(name, age) {
    this.name = name
    this.age = age
}

// __new
console.log('__new')
const __mxin = __new(Person, '__mxin', 18)
console.log(__mxin)
// Person {name: "__mxin", age: "18"}
//     age: "18"
//     name: "__mxin"
//     __proto__:
//         constructor: ƒ Person(name, age)
//         __proto__: Object

// new
console.log('new')
const mxin = new Person('mxin', 18)
console.log(mxin)
// Person {name: "mxin", age: "18"}
//     age: "18"
//     name: "mxin"
//     __proto__:
//         constructor: ƒ Person(name, age)
//         __proto__: Object

100+小程序源码关注公众号回复 5 获取(不想看激励视频的可私信)

alt

本文由 mdnice 多平台发布

标签:__,详细,age,JavaScript,mxin,constructor,new,name
From: https://blog.csdn.net/Jarvan_I/article/details/137141436

相关文章

  • 深度学习技巧应用39-深度学习模型训练过程中数据均衡策略SMOTE的详细介绍,以及SMOTE的
    大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用39-深度学习模型训练过程中数据均衡策略SMOTE的详细介绍,以及SMOTE的算法原理与实现,本文介绍了一种用于处理分类数据不平衡问题的过采样方法——SMOTE算法。SMOTE算法通过在少数类的样本之间插值来创建新的样本,从而增加少......
  • JavaScript快速入门笔记之七(String:字符串类型、RegExp:正则表达式)
    JavaScript快速入门笔记之七(String:字符串类型、RegExp:正则表达式)String:字符串类型什么是字符串?底层本质:一串字符组成的只读字符数组包装类型:临时封装原始类型数据,并提供对数据操作方法的对象——类型名和原始类型名相同!StringNumberBoolean何时使用:不必手动创建!......
  • 使用new[]后使用delete[]根本原因
    需要分情况讨论:以下环境为Ubuntu20.04g++9.4.0当数据是基本数据类型时,由于没有析构函数,所以系统没有必要记录数组大小。所以new[]后的指针就是实际申请内存大小,所以delete与delete[]没有区别,以下代码是不会抛出申请与释放指针不一致异常#include<iostream>intmai......
  • uniapp(全端兼容) - 最新移动端评论区讨论点赞回复功能,可发表文字或图片评论|点赞|回
    效果图在uniapp小程序/h5网页网站/安卓苹果app/nvue等(全平台完美兼容)开发中,实现评论区、讨论区功能详细教程,uniapp评论区用户可发布图片、视频、文字进行评论,其他用户可进行“无限级|盖楼评论区”,点赞评论、回复评论、删除评论(自动计算刷新,不影响布局),当评论大于n条时自......
  • NEW CONCEPT ENGLISH 51 - 60
    NEWCONCEPTENGLISH51-60Lesson51 ApleasantclimateKeywordsandexpressionsGreece n. 希腊country n. 国家climate n. 气候(长时间的气候特征)pleasant adj. 宜人的ea发/e/sometimes adv. 有时always adj. 总是weather n. 天气(短时间的天气状......
  • 从头开始,建立Neo4j图数据库,详细版
    1、前提支持:Java的JDK,在使用Neo4j图数据库之前,电脑上首先要有JDK环境;如果没有下载过JDK请参考:(1)https://www.onlinedown.net/soft/10053430.htm      (2)现在完成的资源如下所示:      (3)通过解压-得到如下所示文件夹:这个文件夹名称很关键;     (4)打......
  • 《手把手教你》系列技巧篇(五十九)-java+ selenium自动化测试 - 截图三剑客 -上篇(详细教
    1.简介今天本来是要介绍远程测试的相关内容的,但是宏哥在操作服务器的时候干了件糊涂的事,事情经过是这样的:本来申请好的Windows服务器用来做演示的,可是服务器可能是局域网的,连百度都不能访问,宏哥想调试一下网络,禁用网卡,然后重启网卡,结果禁用后就连不上了。。。。就只能等服......
  • 《手把手教你》系列技巧篇(六十)-java+ selenium自动化测试 - 截图三剑客 -中篇(详细教程
    1.简介前面我们介绍了Selenium中TakeScreenshot类来截图,得到的图片是浏览器窗口内的截图。有时候,只截浏览器窗口内的图是不够的,而且TakeScreenshot截图只针对浏览器的web事件,假如你在运行脚本过程,windows上有一个其他软件弹出了一个购物的弹窗页面,这个时候就会干扰你......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧004-A new way of working-一种新型
    PDF格式公众号回复关键字:ZKYD004阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文章......
  • 2024年天府杯A题详细解题思路
    本次天府杯预估赛题难度A<B,选题人数A:B=4:1。具体的选题比例还需要等今晚各个平台的投票统计结果。下面基于本次选题最多的A题,给大家带来详细解题思路。本次竞赛题目为科研绩效分配方案设计与优化。正好对应了该题目的两个方向方案设计以及优化模型。首先,对于有数据的题目第一......