new做了些什么?

Posted topyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了new做了些什么?相关的知识,希望对你有一定的参考价值。

new做了些什么?

function People(name, age)
    this.name = name;
    this.age = age;
;

var xiaoming = new People();

要创建 People 的新实例,必须使用 new 操作符。以这种方式调用构造函数实际上会经历以下 4
个步骤:

  1. 创建一个新对象;
  2. 将this 就指向了这个新对象;(同时还继承了该函数的原型) -- 将新对象 __ proto __ 指向 构造函数 prototype;
  3. 执行构造函数中的代码(为这个新对象添加属性);
  4. 返回新对象。
1. var obj  = ;

2. obj.__proto__ = People.prototype;
   People.call(obj);
   
3. People();

4. teturn obj;

手写实现New

function myNew() 
    // 创建一个空的对象
    let obj = new Object()
    // 获得构造函数(即arguments[0])
    let Con = [].shift.call(arguments)  //获取第一个参数,shift()直接修改原数组
    // 链接到原型
    obj.__proto__ = Con.prototype
    // 绑定 this,执行构造函数
    let result = Con.apply(obj, arguments)
    // 确保 new 出来的是个对象
    return typeof result === 'object' ? result : obj

以上是关于new做了些什么?的主要内容,如果未能解决你的问题,请参考以下文章

282 继承模式:原型链继承 : 得到方法,借用构造函数 : 得到属性,组合,new一个对象背后做了些什么

dreamvc框架,dispartcher做了些什么

从架构演进的角度聊聊Spring Cloud都做了些什么

转Rollback后undo到底做了些什么?

打印日志时 Logback 内部都做了些什么

电脑在开机的时候都做了些什么