手写new关键字

作者: 竹叶寨少主 | 来源:发表于2020-11-12 17:10 被阅读0次
首先我们要清楚new关键字做了什么事情
1.在内存中创建一个新的空对象。
2.让 this 指向这个新的对象。
3.执行构造函数里面的代码,给这个新对象添加属性和方法。
4. 返回这个新对象

ok,废话不多说,直接上代码

/* 首先写一个简单的构造函数 */
function Person (name,age){
    this.name = name
    this.age  = age
}
Person.prototype.say = function(){
    console.log(this.name)
}
function myNew(fn){ 

    /*  首先创建一个空对象,最后会返回这个对象 */
    let myObj = {}

    /* 将新对象的对象原型指向构造函数的原型对象 */
    myObj.__proto__ = fn.prototype

    /* 接下来需要执行构造函数的代码,并将this指向新创建的对象。arguments是个伪数组,第一个参数是构造函数。
    剩下的参数是需要传入构造函数的参数,经过如下处理,params中存入的是构造函数需要的参数,且是一个真数组
    */
    const params = Array.prototype.slice.call(arguments).splice(1)
    
    /* 通过apply改变this指向,并执行构造函数 */
    fn.apply(myObj,params)

    /* 最后返回该对象 */
    return myObj
}
/* 对比一下new关键字和自己写的myNew */
const p1 = new Person('二牛',18) //Person { name: '二牛', age: 18 }
const p2 = myNew(Person,'铁柱',20) // Person { name: '铁柱', age: 20 }
console.log(p1,p2)
p1.say() // 二牛
p2.say() // 铁柱

相关文章

  • 手写new关键字

    首先我们要清楚new关键字做了什么事情 1.在内存中创建一个新的空对象。 2.让 this 指向这个新的对象。 3...

  • 手写new关键字

    可以看到obj2这个对象里有了name这个属性,并且他的原型上也有sayName这个函数,调用这个函数也没有问题。...

  • 手写new

  • C++中new、operator new和placement n

    1. new (1)C++对象实例化的时候使用new关键字和不使用new关键字的区别 使用new是动态分配内存,这...

  • 面试秘籍之手写系列

    一、手写call函数 二、手写bind函数 三、手写实现new功能的函数 四、手写reduce函数 五、手写防抖函...

  • 前端手写

    节流 防抖 用xhr手写axios 函数柯里化 手写promise 手写reduce new 深拷贝 string...

  • JS 手写 new

    new 关键字作用 众所周知,js 中 new 关键字的作用就是创建一个构造函数的实例对象 如以下构造函数,使用 ...

  • Java中生成实列

    1.new 一般我们使用Java关键字new生成实例。 Something obj=new Something()...

  • JavaScript new 关键字

    new 关键字 在JavaScript中, new 关键字用来创建一个类(模拟类)的实例对象。 实例化对象之后, ...

  • Java中创建对象的四种方式

    使用new关键字创建对象 使用new关键字创建对象是最常见的一种方式,但是使用new创建对象会增加耦合度。在开发中...

网友评论

    本文标题:手写new关键字

    本文链接:https://www.haomeiwen.com/subject/wzupbktx.html