原生JS实现_new函数:深入解析new关键字内部原理

作者:纸飞机时间:2026-10-22 16:47:00浏览:107

本文深入剖析JavaScript中new关键字的底层工作原理,包括创建对象、绑定原型及执行构造函数三个核心步骤。基于此原理,详细演示如何封装一个模拟new行为的_new函数,并通过代码测试验证其功能与原生new完全一致,帮助开发者理解JS对象创建机制。

前言与new关键字原理概述

一、前言

在JavaScript开发中,创建对象是基础操作,通常通过new关键字实例化。

本文将深入探讨new关键字在JavaScript内部的执行机制,解析其底层工作原理。

二、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关键字原理概述


前言与new关键字原理概述

通过观察上述输出,我们可以发现以下关键点:

使用new关键字实例化对象时,系统首先创建了一个空对象xm,该对象包含了构造函数中定义的name和age两个属性。此外,该实例xm还继承了Person.prototype上的属性和方法。基于此,我们可以总结出new关键字在实例化过程中的内部执行逻辑(假设构造函数为Func):

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

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

3. 返回新对象;

三、封装_new函数

明确了new关键字的内部原理后,我们可以尝试封装一个名为_new的函数,使其具备与原生new关键字相同的功能。

_new函数需要接收以下参数:

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

第二个参数及后续参数:构造函数的具体参数列表。

_new函数的封装实现


 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关键字一致的功能。

_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关键字原理概述

从测试结果可以看出,_new函数的功能与原生new关键字完全一致。

总结

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

作者最新文章