前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何实现一个new方法

如何实现一个new方法

作者头像
刘嘿哈
发布2022-10-25 14:14:18
1990
发布2022-10-25 14:14:18
举报
文章被收录于专栏:js笔记js笔记

es5没有类的概念,使用function模拟类,使用大概如下

代码语言:javascript
复制
  function Parent(name,age){
      this.name=name;
      this.age=age;
  }
  Parent.prototype.say=function(){
      console.log('你好'+this.name);
  }
  var child=new Parent('星辰',18)
  child.say()

当我们new一个构造器,主要有三步:

• 创建一个空对象,将它的引用赋给 this,继承函数的原型。 • 通过 this 将属性和方法添加至这个对象 • 最后返回 this 指向的新对象,也就是实例(如果没有手动返回其他的对象)

代码语言:javascript
复制
// ES5构造函数
let Parent = function (name, age) {
    //1.创建一个新对象,赋予this,这一步是隐性的,
    // let this = {};
    //2.给this指向的对象赋予构造属性
    this.name = name;
    this.age = age;
    //3.如果没有手动返回对象,则默认返回this指向的这个对象,也是隐性的
    // return this;
};
const child = new Parent();

new 关键字大概 是使用构造函数的原型创建一个对象,然后调用构造函数初始化属性,最后根据构造函数返回值决定返回什么 • 以构造器的prototype属性为原型,创建新对象; • 将this(也就是上一句中的新对象)和调用参数传给构造器,执行; • 如果构造器没有手动返回对象,则返回第一步创建的新对象,如果有,则舍弃掉第一步创建的新对象,返回手动return的对象。

代码语言:javascript
复制
   function Parent(name,age){
       this.name=name;
       this.age=age;
   }
   Parent.prototype.say=function(){
       console.log('你好'+this.name);
   }
   function newNew(c,...res){
    //使用构造函数原型对象创建空对象,继承原型方法
    var obj=Object.create(c.prototype);
    // 调用父类,初始化属性
    var result=c.apply(obj,res);
    // 执行构造函数,若是返回一个新对象,new就会返回这个新对象,否则返回obj
    return typeof result==='object'?result:obj;
   }

   var child=new Parent('星辰',18)
   child.say()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档