美文网首页
5分钟搞定new

5分钟搞定new

作者: percykuang | 来源:发表于2019-10-12 19:27 被阅读0次

5分钟搞定new

new一个函数到底干了啥?

在JS中,当new一个函数后,JS编译器将会做以下四件事情

  1. 创建一个新的空对象

  2. 把这个空对象链接到这个函数(构造函数)的原型对象上

  3. 这个对象被绑定为this

  4. 如果这个函数不返回任何东西,或者返回的值是除对象外的其它基本类型,那么默认就会return this

  5. 如果这个函数返回的是一个对象,那么就会直接返回这个对象,而不会return this

自己写一个new

/**
 * myNew默认第一个参数是一个函数假设为fn,后续的参数作为fn的参数
 */
function myNew() {
  if (arguments.length === 0 || typeof arguments[0] !== 'function') {
    throw new Error('error: please check your params!!')
  }
  var _args = Array.from(arguments)
  var _constructor = _args.shift()
  var _this = Object.create(_constructor.prototype)
  var res = _constructor.apply(_this, _args)

  // 注意:对于new这个关键字来说,如果你默认在构造函数中不返回任何值,则它会帮你返回构造出的对象。
  // 如果你在构造函数中手动的写了返回值,也不是所有的返回值都是原封不动返回的。
  // 如果返回的是null、undefined等一些基本类型,则都会返回 new 出来的对象;
  // 如果返回的是object,才会把这个object当成返回值返回出去
  if (res instanceof Object) {
    return res
  }
  return _this
}

相关文章

  • ceph支持对象存储多租户

    搞定ceph对象存储集成keystone认证。rgw keystone make new tenants = true

  • 5分钟搞定new

    5分钟搞定new new一个函数到底干了啥? 在JS中,当new一个函数后,JS编译器将会做以下四件事情 创建一个...

  • iOS SDK开发入门姿势详解

    1、创建workspace 两张图搞定的事情,就不写了。① 打开Xcode,左上角 File--> New -->...

  • iOS SDK开发

    1、创建workspace 两张图搞定的事情,就不写了。① 打开Xcode,左上角 File--> New -->...

  • 在树莓派上编译运行GTA3

    最近观闻《GTA3迟迟不推出Switch版本,于是玩家自己动手搞定了》[https://new.qq.com/om...

  • 对象创建概览-上帝猿视角

    语言层面上,创建对象通畅仅仅是一个new搞定,在虚拟机中,过程是如何的?(不包括数组和Class对象) 虚拟机遇到...

  • 我是一切的根源

    常常听人说,我要搞定孩子,要搞定公婆,要搞定伴侣,要搞定客户,要搞定这个,搞定那个,却很少有听说要搞定自己。 我们...

  • 一文搞定js new发生了什么,new的作用是什么?

    关于js的new,老东西了。言简意赅说下,其实它是继承的一种。 new发生了什么? 看下最官方的介绍: var o...

  • New place, New day, New life

    今早五点钟醒来 —可并不是澳大利亚的五点钟 而是在美国奥兰多Orlando的时间:八月七号的早晨五点钟。现在的澳洲...

  • New month,new start and new self

    今日复盘 1.早起5:26√ 2.口语晨读√ 3.演讲练习×(出席升国旗活动,推掉) 4.健身√ 5.大物复习+作...

网友评论

      本文标题:5分钟搞定new

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