原生JS封装_new函数实现new关键字的功能

 更新时间:2018年08月12日 09:05:28   作者:难凉热血,前端菜鸡!  
这篇文章主要介绍了原生JS封装_new函数,实现new关键字的功能 ,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

一.前言

众所周知:没有对象怎么办?那就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.拿到传入的参数中的第一个参数,即构造函数名Func
   var Func = [].shift.call(arguments);
   //2.创建一个空对象obj,并让其继承Func.prototype
   var obj = Object.create(Func.prototype);
   //3.执行构造函数,并将this指向创建的空对象obj
   Func.apply(obj,arguments)
   //4.返回创建的对象obj
   return obj
 }

四.测试_new函数

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

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

测试结果:



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

总结

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

相关文章

  • 前端实现界面切换主题代码示例

    前端实现界面切换主题代码示例

    这篇文章主要介绍了前端实现界面切换主题的相关资料,文中介绍了两种方法,通过link标签的rel属性和通过变量设置,前者适用于确定的主题样式切换,后者则适用于在拾色器中任意选择颜色更换主题的情况,需要的朋友可以参考下
    2025-02-02
  • javascript框架设计读书笔记之模块加载系统

    javascript框架设计读书笔记之模块加载系统

    本文是司徒正美的《javascript框架设计》的第二章模块加载系统的读书笔记,根据自己的理解,简要的跟大家讲述了本章的主要内容,方便大家更好的学习。
    2014-12-12
  • json中换行符的处理方法示例介绍

    json中换行符的处理方法示例介绍

    json经常使用,但如果字段中出现换行符如何处理,测试一下json类的处理,也没有发现。想不到最终的处理确实如此简单
    2014-06-06
  • 微信小程序学习笔记之本地数据缓存功能详解

    微信小程序学习笔记之本地数据缓存功能详解

    这篇文章主要介绍了微信小程序学习笔记之本地数据缓存功能,结合实例形式分析了微信小程序wx.setStorage、wx.getStorage以及wx.removeStorage、wx.clearStorage针对数据缓存的存取、删除等相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • uniapp小程序配置tabbar底部导航栏实战指南

    uniapp小程序配置tabbar底部导航栏实战指南

    tabBar如果应用是一个多tab应用,可以通过tabBar配置项指定tab栏的表现,以及tab切换时显示的对应页,下面这篇文章主要给大家介绍了关于uniapp小程序配置tabbar底部导航栏的相关资料,需要的朋友可以参考下
    2022-09-09
  • javascript容错处理代码(屏蔽js错误)

    javascript容错处理代码(屏蔽js错误)

    本文主要介绍了javascript的容错处理代码。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • 微信小程序实现的3d轮播图效果示例【基于swiper组件】

    微信小程序实现的3d轮播图效果示例【基于swiper组件】

    这篇文章主要介绍了微信小程序实现的3d轮播图效果,结合实例形式分析了微信小程序基于swiper组件相关属性设置、事件响应操作技巧,需要的朋友可以参考下
    2018-12-12
  • javascript实现在网页中运行本地程序的方法

    javascript实现在网页中运行本地程序的方法

    这篇文章主要介绍了javascript实现在网页中运行本地程序的方法,实例分析了JavaScript基于ActiveXObject运行本地程序的技巧,需要的朋友可以参考下
    2016-02-02
  • JavaScript实现九宫格抽奖

    JavaScript实现九宫格抽奖

    这篇文章主要为大家详细介绍了JavaScript实现九宫格抽奖,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Web性能优化系列 10个提升JavaScript性能的技巧

    Web性能优化系列 10个提升JavaScript性能的技巧

    Javascript 性能优化绝不是一种书面的技术,Nicholas 的技术演进列出了10条建议,帮助你写出高效的 JS 代码
    2016-09-09

最新评论