手写new关键字

  • 时间:2021-03-20 20:30 作者:二营长敲代码 来源: 阅读:478
  • 扫一扫,手机访问
摘要:首先我们要清楚new关键字做了什么事情1.在内存中创立一个新的空对象。2.让 this 指向这个新的对象。3.执行构造函数里面的代码,给这个新对象增加属性和方法。4. 返回这个新对象ok,废话不多说,直接上代码/* 手先写一个简单的构造函数 */function Person (name,age){
首先我们要清楚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() // 铁柱
  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
【系统环境|】ZORRO佐罗软件安装教程及一键新机使用方法详细简介(2023-02-10 21:56)
【系统环境|】阿里云 centos 云盘扩容命令(2023-01-10 16:35)
【系统环境|】补单系统搭建补单源码搭建(2022-05-18 11:35)
【系统环境|服务器应用】高端显卡再度登上热搜,竟然是因为“断崖式”的降价(2022-04-12 19:47)
手机二维码手机访问领取大礼包
返回顶部