一.前言

众所周知:没有对象怎么办?那就new一个!

那么在JS中,当我们new一个对象的时候,这个new关键字内部都干了什么呢?

现在我们就来剖析一下原生JS中new关键字内部的工作原理。

二.原始的new

首先,我们先new一个对象看看:

//创建Person构造函数,参数为name,age
function Person(name,age){this.name = name;this.age = age;}
//实例化对象小明
xm = new Person('xiaoming',18);
//打印实例化出来的对象小明
console.log(xm);

打印结果:

从打印结果中可以看到:

用new关键字实例化对象时,首先创建了一个空对象xm,并且这个空对象包含两个属性name和age,分别对应构造函数中的两个属性,其次我们也可以知道实例化出来的这个对象xm是继承自Person.prototype,那么现在我们就可以总结出new关键字在实例化对象时内部都干了什么,其实,new关键字内部干了如下三件事(已知构造函数为Func):

1.创建一个空对象,并使该空对象继承Func.prototype;

2.执行构造函数,并将this指向刚刚创建的新对象;

3.返回新对象;

三.封装_new函数

当我们知道new关键字的内部原理后,我们就可以封装一个_new函数,使其用于与new关键字同样的功能。

_new函数需要传入以下几个参数:

第一个参数:构造函数名Func;

第二个参数及后面的参数:构造函数的参数

function _new(){//1.拿到传入的参数中的第一个参数,即构造函数名Funcvar Func = [].shift.call(arguments);//2.创建一个空对象obj,并让其继承Func.prototypevar obj = Object.create(Func.prototype);//3.执行构造函数,并将this指向创建的空对象objFunc.apply(obj,arguments)//4.返回创建的对象objreturn obj
}

四.测试_new函数

封装好后,我们来测试一下封装的_new函数,看看它是否实现了和原生new关键字同样的功能。

//创建Person构造函数,参数为name,age
function Person(name,age){this.name = name;this.age = age;
}
function _new(){//1.拿到传入的参数中的第一个参数,即构造函数名Funcvar Func = [].shift.call(arguments);//2.创建一个空对象obj,并让其继承Func.prototypevar obj = Object.create(Func.prototype);//3.执行构造函数,并将this指向创建的空对象objFunc.apply(obj,arguments)//4.返回创建的对象objreturn obj
}
xm = _new(Person,'xiaoming',18);
console.log(xm);

测试结果:

从测试结果看到,_new函数的功能与new关键字完全一致。

总结

以上所述是小编给大家介绍的原生JS封装_new函数实现new关键字的功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

转载于:https://www.cnblogs.com/ysk123/p/10224391.html

JS实现new关键字的功能相关推荐

  1. js根据数据关键字实现模糊查询功能

    js根据数据关键字实现模糊查询功能 模糊查询 实现模糊查询功能的步骤和一般方法 第一步:创建假数据或请求接口数据 第二步:分析数据格式,处理数据 第三步:验证功能 完整代码 模糊查询 模糊查询功能是指 ...

  2. android京东秒杀倒计时,js实现京东秒杀倒计时功能

    本文实例为大家分享了js实现京东秒杀倒计时功能的具体代码,供大家参考,具体内容如下 首先给大家看看效果图,因为是做的移动端的,所以放大给大家看看局部就行: 关于实现京东秒杀,之前用过其他的方法,今天给 ...

  3. 【转】js实现复制到剪贴板功能,兼容所有浏览器

    2019独角兽企业重金招聘Python工程师标准>>> 两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家 ...

  4. JS 使用html2canvas实现截图功能的问题记录和解决方案

    JS 使用html2canvas实现截图功能的问题记录和解决方案 参考文章: (1)JS 使用html2canvas实现截图功能的问题记录和解决方案 (2)https://www.cnblogs.co ...

  5. JS中this关键字

    JS中this关键字 this是javascript的一个关键字,随着函数使用场合不同,this的值会发生变化.但是总有一个原则,那就是this指的是调用函数的那个对象. 1.全局代码中的this a ...

  6. html中纯js互斥按钮,JS如何实现checkbox互斥功能

    JS如何实现checkbox互斥功能 发布时间:2021-04-19 14:19:45 来源:亿速云 阅读:88 作者:小新 这篇文章主要介绍了JS如何实现checkbox互斥功能,具有一定借鉴价值, ...

  7. nodejs mysql备份_node.js实现备份mysql数据库功能

    node.js实现备份mysql数据库功能 发布时间:2019-10-09编辑:星王 原创 阅读(1697) 在node.js上实现备份mysql数据库到指定文件夹内,并且能够同步执行操作,首要是对m ...

  8. 用JS实现发邮件的功能 完美解决

    怎样用JS实现发邮件的功能? 我想用JS实现把页面文本框中的内容直接通过邮件的方式发送到一个指定的邮箱. fengxq给出的答案是 <script language=javascript> ...

  9. js中写java集合代码,JS实现JAVA的List功能

    本次的文章给大家分享了关于JS实现JAVA的List功能的代码,有兴趣的朋友可以看一下function List(){ var list = new Array(); /* 添加元素 */ this. ...

  10. php mysql 高亮显示_PHP实现多关键字加亮功能

    本文主要介绍的是PHP实现多关键字加亮功能,可以实现在搜索的时候进行高亮提醒,具体实现代码如下: 项目结构: 搜索结果:  高亮显示 项目所需数据库结构: 实现代码: conn.php $conn = ...

最新文章

  1. upstream--负载
  2. linux更换网卡不识别_详解Linux双网卡绑定脚本的方法示例
  3. InnerHTML、InnerText、outerHTML、outerText的区别
  4. C++之临时对象的构造与析构
  5. Go学习——defer、panic
  6. 仿生计算(参考神经网络)2017年考试卷子,考前抱佛脚必备!!中英翻译版本!!
  7. python面向对象(2)—— 继承(2)
  8. GIF动图制作全攻略!不用PS简单快速制作GIF动图!
  9. Failed to obtain JDBC Connection;
  10. 趣味ACM题——圣骑士的斩杀
  11. 元数据是什么?如何管理元数据?
  12. 体育教学与计算机技术的结合点,浅析计算机技术在高校体育教学中的应用
  13. 虾皮电商选品时必须注意哪些是违禁品
  14. 线性代数---魏福义版 第一章习题答案
  15. 好色机器人的艳遇_机器人艳遇:《机器人的旅行》
  16. Centos7运行Docker1.13.1报错Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor pres
  17. android 打开h5文件下载,微信h5页面下载app —— 安卓直接下载apk文件包,IOS跳转AppStore的实现代码...
  18. 达思Linux数据恢复ext破解版,达思Linux数据恢复软件
  19. python环境安装什么意思_为什么学习Python及Python环境安装
  20. 网络版控制台三国杀结构图

热门文章

  1. 高通RFC适配RFFE-添加MIPI设备【转】
  2. 帮你躲坑:pip install tensorflow 报错怎么办,import tensorflow 报错怎么办?
  3. Xcode9使用新体验
  4. POJ2752 (Seek the Name, Seek the Fame,kmp)
  5. linux用户批量修改密码,Linux 命令详解 chpasswd 批量修改用户密码
  6. java cxf webservice 对象 c#客户端_使用CXF开发WebService客户端
  7. java in list,Java 8流过滤:IN子句
  8. strace的简单用法
  9. 项目搭建系列之一:使用Maven搭建SpringMVC项目
  10. 关于利用border-radius变形后,margin的参照对象