EN zh-cn
X
博客

new Function 发生了什么

Posted in 时刻准备着 on 6月 22, 2021

new Function()时到底发生了什么!?

 function F(){ //code here } var p = new F; 

1 . 新建一个对象: instance = new Object(); 

2 . 设置原型链 instance.__proto__ = F.protorype; 

3 . 让F中的this指向instance,执行F函数体 

4 . 判断F的返回值类型: 如果是值类型,就丢弃它,还是返回instance 如果是引用类型,就返回这个引用类型的对象,替换掉instance 

注: 

① 如果没有写return,相当于return undefined,undefined是值类型,因此丢弃,返回instance 

② 如果return this相当于返回一个应用类型的对象,它就是instance,无所谓替换不替换 

③ 对instance并不需要设置它的constructor属性,这个属性在instance的原型中 


console.assert(!p.hasOwnProperty('constructor')); // => true console.assert(F.prototype.hasOwnProperty('constructor')); // => true


而且,任意一个新函数在创建时,原型的constr...