木灵鱼儿

木灵鱼儿

阅读:819

最后更新:2019/04/21/ 3:10:28

new 操作符具体做了什么

new操作符一般肯定会说创建一个对象,但是实际上其实可以细分为四个步骤。

  1. 创建一个空对象
  2. 链接原型
  3. 改变this指向
  4. 将这个对象隐式return出来

就已new一个构造函数来举例子:

你new出来的这个构造函数他本身有对应的属性,也有prototype,你var me = new 构造函数,那么me自然会拥有构造函数的所有。

那么这个如何拥有,就是new操作符所做的事情。

  var me = new 构造函数();
  //等同于如下
  var me = function() {
      var obj = {};
      obj._proto_ = 构造函数.prototype;
      var result = 构造函数.call(obj);
      return typeof result === 'object' ? result : obj;
  }

注意:

_proto_属于隐式原型

个人猜测:

因为万物皆对象,只有构造函数才有prototype这个指针,那么隐式原型其实每个对象都有,那么每次new出新的对象时,就会对应的去链接初始原型,这里面就包含了这些对象的方法,如new Image()的onload事件啊,这些都是隐式原型中的。

return的时候,判断,你是object对象还是其他的对象,然后对应return出值

版权申明

本文系作者 @木灵鱼儿 原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。

关于作者

站点职位 博主
获得点赞 0
文章被阅读 819

相关文章

目录树