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

这篇博客探讨了JavaScript中new关键字的工作原理,并详细解释了new内部的三个步骤:创建继承自构造函数原型的空对象,执行构造函数并设置this,最后返回新对象。作者通过理解这些原理,封装了一个名为_new的函数,该函数能够模仿new关键字的行为。在测试部分,展示了_new函数成功地创建了与new关键字实例化相同效果的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前言

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

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

2.原始的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关键字在实例化对象时内部都干了什么

3.new内部原理

其实,new关键字内部干了如下三件事(已知构造函数为Func):

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

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

3.返回新对象;

4.封装_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
}

5.测试_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关键字完全一致。

完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值