zoukankan      html  css  js  c++  java
  • 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
    }
    
  • 相关阅读:
    English trip -- VC(情景课)1 A Get ready
    隔板法总结
    CF 题目选做
    ZROI 提高十连测 DAY2
    2019 09 05
    线性基总结
    解决痛苦的方法/cy
    梅深不见冬 树上贪心
    ZROI 提高十连测 Day1
    [USACO09NOV]硬币的游戏 博弈 dp
  • 原文地址:https://www.cnblogs.com/topyang/p/11397188.html
Copyright © 2011-2022 走看看