码迷,mamicode.com
首页 > 其他好文 > 详细

new做了些什么?

时间:2019-08-22 23:33:37      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:必须   操作   func   方式   str   obj   var   使用   prototype   

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做了些什么?

标签:必须   操作   func   方式   str   obj   var   使用   prototype   

原文地址:https://www.cnblogs.com/topyang/p/11397188.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!