new的实现原理

目录

 

1.new的四个步骤

2.new的实现过程

3.例子


 

1. new的四个步骤

 创建一个空对象→这个新对象继承原函数的原型→更改this指向,为对象设置属性→返回新对象

    1.创建一个空对象

    var obj={}

    2.这个新对象继承原构造函数的原型

    obj._proto_=Constructor.prototype

    3.更改this指向,为对象设置属性

    let result=Constructor.apply(obj,...args)

    4.返回新对象

    return result instanceof Object ? result : obj

2.new的实现过程

 

function myNew(constrc, ...args) {

    // 1. 创建一个空对象
    const obj = {}; 

    // 2. 将obj的_proto_属性指向构造函数的原型对象
    obj.__proto__ = constrc.prototype; 
    
    // 3.将constrc执行的上下文this绑定到obj上,并执行
    const result = constrc.apply(obj, args);

    //4. 如果构造函数返回的是对象,则使用构造函数执行的结果。否则,返回新创建的对象
    return result instanceof Object ? result : obj; 

}

3.例子

function Person(name, age){

    this.name = name;

    this.age = age;

}

Person.prototype.sayHello=function(){

    console.log("hello"+this.name)

}

const person1 = myNew(Person, 'Tom', 20)

console.log(person1) //Person {name: "Tom", age: 20}
person1.sayHello() //helloTom

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值