本文深入剖析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关键字实例化对象时,系统首先创建了一个空对象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关键字完全一致。
总结
以上介绍了原生JS中封装_new函数以实现new关键字功能的方法,希望这对您有所帮助。如有任何疑问,欢迎留言,小编会及时回复大家!