一.前言
众所周知:没有对象怎么办?那就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关键字的功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- LuciaMicarelli《AnEveningWithLuciaMicarelli(Live)》[WAV分轨]
- 娜琏《NA》[320K/MP3][51.93MB]
- 娜琏《NA》[FLAC/分轨][293.28MB]
- (G)I-DLE《I SWAY》[320K/MP3][26.11MB]
- 黑鸭子2005-发烧[首版][WAV+CUE]
- 黄思婷2002-感动[豪记唱片][WAV+CUE]
- 黄乙玲1993-受伤的心·冷暖人生[台湾首版][WAV+CUE]
- (G)I-DLE《I SWAY》[FLAC/分轨][150.46MB]
- FTISLAND《Serious》[320K/MP3][82.33MB]
- FTISLAND《Serious》[FLAC/分轨][476.5MB]
- 曾庆瑜1988-你听一听[清优][WAV+CUE]
- Bach,Vieuxtemps,Gruenberg-ViolinConcertos-Heifetz(2012)FLAC
- ConcertoScirocco-SirensSoldiers.SongswithoutWordsfromtheItalianSeicento(2024)[24
- NCT 127《WALK - The 6th Album》[320K/MP3][76.57MB]
- NCT 127《WALK - The 6th Album》[FLAC/分轨][432.81MB]