01 # 手写 new 的原理

简介: 01 # 手写 new 的原理

new 做了什么?

  1. 在构造器内部创建一个新的对象
  2. 这个对象内部的隐式原型指向该构造函数的显式原型
  3. 让构造器中的 this 指向这个对象
  4. 执行构造器中的代码
  5. 如果构造器中没有返回对象,则返回上面的创建出来的对象

手写 new 的过程

new 是一个运算符,只能通过函数的方式去模拟

<script>
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    // 使用 kaimoPerson 函数去模拟 new 运算符
    function kaimoPerson(fn, ...args) {
        // 1) 创建一个对象
        let obj = {};
        // 2) 让对象的隐式原型指向 fn 的显式原型
        obj.__proto__ = fn.prototype;
        // 3) 改变 this 指向;4) 执行 fn
        fn.apply(obj, args);
        // 5) 返回对象
        return obj;
    }
    let p1 = new Person("kaimo", 313);
    console.log("p1---->", p1);
    let p2 = kaimoPerson(Person, "kaimo", 313);
    console.log("p2---->", p2);
</script>

目录
相关文章
|
6月前
|
XML Java 数据格式
手写spring框架——第一篇
手写spring框架——第一篇
44 0
|
2月前
|
XML 缓存 Java
手写Spring源码(简化版)
Spring包下的类、手写@ComponentScan注解、@Component注解、@Autowired注解、@Scope注解、手写BeanDefinition、BeanNameAware、InitializingBean、BeanPostProcessor 、手写AnnotationConfigApplicationContext
手写Spring源码(简化版)
|
6月前
|
JavaScript 前端开发
不会还有人的批改网还是手写的把
不会还有人的批改网还是手写的把
|
Java 测试技术 API
源码分析系列教程(02) - 手写Spring事务框架
源码分析系列教程(02) - 手写Spring事务框架
69 0
|
6月前
|
索引
09 # 手写 some 方法
09 # 手写 some 方法
42 0
|
6月前
|
索引
10 # 手写 every 方法
10 # 手写 every 方法
46 0
|
监控 前端开发 JavaScript
常见手写前端面试题,看看自己能写出来多少
手写前端面试题,面试必备
34515 140
常见手写前端面试题,看看自己能写出来多少
|
缓存 前端开发 API
手写中实现并学习ahooks——useRequest
最近业务没有之前紧张了,也是消失了一段时间,也总结了一些之前业务上的问题。 和同事沟通也是发现普通的async + await + 封装api在复杂业务场景下针对于请求的业务逻辑比较多,也是推荐我去学习一波ahooks,由于问题起源于请求,因此作者也是直接从 useRequest 开始看起。
191 1
|
前端开发 算法 安全
前端面试100道手写题(1)—— 手写Promise实现
今年的金三银四面试,遇到了很多新的面试八股文,其实心里对手写题或者算法题有一定抵触,因为实际工作中基本上就不会用到这些东西,但是正因为这些基础八股文,才能真正验证一个人对技术有多热爱的程度。也有可能近几年没有对这些基础知识进行巩固,所以干脆一狠心,先立个flag, 准备完成100道手写题。
257 0
|
前端开发 JavaScript
常见前端手写面试题
常见前端手写面试题
344 40