new一个对象的过程是什么,手写代码表示

本文探讨了使用new创建对象的过程,包括创建空对象、继承构造函数原型及执行构造函数。同时,对比了Object.create与使用花括号创建对象的区别,指出{}创建的对象原型默认指向Object.prototype,而Object.create则允许自定义原型对象。
摘要由CSDN通过智能技术生成

new 一个对象的过程

- 创建一个空对象 obj,继承构造函数的原型

- 执行构造函数(将 obj 作为 this)

- 返回 obj

/**
 * @description 实现 new
 */

export function customNew<T>(constructor: Function, ...args: any[]): T {
    // 1. 创建一个空对象,继承 constructor 的原型
    const obj = Object.create(constructor.prototype)
    // 2. 将 obj 作为 this ,执行 constructor ,传入参数
    constructor.apply(obj, args)
    // 3. 返回 obj
    return obj
}

class Foo {
    // 属性
    name: string
    city: string
    n: number

    constructor(name: string, n: number) {
        this.name = name
        this.city = '北京'
        this.n = n
    }

    getName() {
        return this.name
    }
}

const f = customNew<Foo>(Foo, '双越', 100)
co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值