资讯专栏INFORMATION COLUMN

模拟js的new运算符的实现原理

warnerwu / 2921人阅读

摘要:模拟的运算符的实现原理我们知道,里有一种创建对象的方式是通过显式的构造函数出来一个实例化对象但是这个运算符是怎么实现的呢先捋一遍运算符的整个流程创建一个新对象它继承自构造函数的构造函数被执行执行的时候相应的传参会被传入,同时绑定上下文如果构

模拟js的new运算符的实现原理

我们知道,js里有一种创建对象的方式是通过显式的构造函数new出来一个实例化对象
但是 这个new运算符是怎么实现的呢?

先捋一遍new运算符的整个流程:
1: 创建一个新对象 它继承自构造函数的prototype
2:构造函数被执行 执行的时候 相应的传参会被传入,同时绑定上下文(this)
3:如果构造函数返回了一个"对象" 那么这个对象会取代整个new出来的结果。如果构造函数
    没有返回对象,那么new出来的结果为步骤1创建的新对象
  
![图片描述][1]

接下来就手动实现一个new运算符:

 
   
![图片描述][2]

可以看到 Funky的实例化对象funkys 已经有了构造函数Funky本身的属性并且也继承了Funky原型链上的方法
并且 funkys.__proto__ === Funky.prototype
至此,我们已经简单的实现了new运算的功能 是不是蛮简单~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98213.html

相关文章

  • 【进阶3-5期】深度解析 new 原理模拟实现

    摘要:使用指定的参数调用构造函数,并将绑定到新创建的对象。由构造函数返回的对象就是表达式的结果。情况返回以外的基本类型实例中只能访问到构造函数中的属性,和情况完全相反,结果相当于没有返回值。 定义 new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 ——(来自于MDN) 举个栗子 function Car(color) { this.color = co...

    Baaaan 评论0 收藏0
  • 编译原理实战入门:用 JavaScript 写一个简单四则运算编译器(三)模拟执行

    摘要:栈在内存中,栈的特点是只能在同一端进行插入和删除的操作,即只有和两种操作。指令的作用是将一个操作数推入栈中。指令的作用是执行两次操作,弹出两个操作数和,然后执行,再将结果到栈中。 现在来模拟一下 CPU 执行机器指令的情况,由于汇编代码和机器指令一一对应,所以我们可以创建一个直接执行汇编代码的模拟器。在创建模拟器前,先来讲解一下相关指令的操作。 栈 在内存中,栈的特点是只能在同一端进行...

    Ku_Andrew 评论0 收藏0
  • JS-对象

    摘要:一概述是一种面向对象的语言。除了基本数据类型,其他的都是对象。表示创建一个没有原型的空对象。模拟操作符注意返回值访问对象属性访问方式也就是。对象在作为值时,是作为引用传递的。假如判断对象是否为数组目前的很多库,中都是这样实现的。 一、概述 JS是一种面向对象的语言。除了基本数据类型number, string, boolean(true, false), null, undefined...

    kidsamong 评论0 收藏0
  • JavaScript专题之模拟实现call和apply

    摘要:函数可计算某个字符串,并执行其中的的代码男男成功啦实现了函数参数的传递,那么函数返回值怎么处理呢。而且,如果传入的对象是,又该如何处理所以还需要再做一些工作处理返回值返回返回值男男判断传入对象的类型,如果为就指向对象。 本文共 1320 字,读完只需 5 分钟 概述 JS 函数 call 和 apply 用来手动改变 this 的指向,call 和 apply 唯一的区别就在于函数...

    ky0ncheng 评论0 收藏0
  • 从零到有模拟实现一个Set类

    摘要:过滤掉和简单判断是否是迭代器对象模拟行为对迭代器对象进行遍历操作。看到这里你可能已经知道了,要实现的功能之一就是提供一个迭代器。原文链接参考迭代器和生成器系列之模拟实现一个数据结构展开语法循环 前言 es6新增了Set数据结构,它允许你存储任何类型的唯一值,无论是原始值还是对象引用。这篇文章希望通过模拟实现一个Set来增加对它的理解。 原文链接 用在前面 实际工作和学习过程中,你可能也...

    PAMPANG 评论0 收藏0

发表评论

0条评论

warnerwu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<