正在加载中

最后更新于 2019年04月21日

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出值

  • weixiao kaixin tushetou jingkong deyi fanu liezui liuhan daku ganga bishi nanguo lihai qian yiwen numu tu yi haixiu se fadai minyan hehe henkaixin huaji biyiyan kuanghan maimeng shui xiaku penqi zhangzui pen aini ye niu laji ok chigua renshi kongbu shuai xiaoxiese touxiao huaixiao jingnu chihuai kaisang xiaoku koubi zhuangbi lianhong kanbujian shafa zhijing xiangjiao dabian yaowan redjing lazhu rizhi duocang chixigua hejiu xixi xiaopen goukun xiaobuchu shenme wusuowei guancha lajing chouyan xiaochi bie zhadanzui zhadanxiao

登录