JavaScript new内部代码实现过程

之所以想写点东西,主要是因为被某服一面就刷了,自以为基础还行,而且面试官是个的同龄人,被问的一脸懵逼,感叹一下差距;至于什么原因被刷,对于一个职场小白,被问的全是vue响应式原理源码以及一些IE兼容性问题,当然很快就结束了,直接简单明了回答说不知道就灰溜溜的走了。所以打算从js开始写起,把所有面试问到的JS,VUE…等等慢慢写出来

question1.使用new 关键字生成一个对象内部实现的过程

例:var arr = new Array()

  1. 创建新对象 ,即var arr = {};

  2. 创建的新对象arr的__proto__属性指向构造函数的prototype对象,即arr.__proto = Array.prototype, 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象)

  3. 创建的新对象arr调用构造函数,即Array.call(arr) ;这里有学问了,后续问我apply,call,bind的相同点和不同点;

  4. 返回新对象,如果构造函数返回的是基本数据类型,则返回的arr是构造函数的对象;如果构造函数返回的不是基本数据类型值(funcition,对象等),则返回的arr是该构造函数return的值 (function,对象等);

补充:

JavaScript new内部代码实现过程_第1张图片
方法myNew里面的四行代码就是new的过程:
第一行:把类数组列表arguments的第一位截取出来,获得构造函数
第二行:声明一个对象,使用object.create()方法(详细用法参考MDN文档),第一个参数为构造函数的原型
第三行:执行该构造函数,并改变构造函数的this为instance
第四行:返回这个对象

结语

上面的操作可以在F12里面进行操作一下就懂了,下次复杂的我贴代码吧,然后被问到的我会一一写出来;emmmm,还有写的皆个人理解,希望不正确的地方大家可以指正,对小白多一点宽容。明天在见!!

你可能感兴趣的:(JS)