鍍金池/ 問(wèn)答/HTML/ babel轉(zhuǎn)碼es6的繼承語(yǔ)法時(shí)為什么給子類(lèi)構(gòu)造函數(shù)設(shè)置__ptoto__?

babel轉(zhuǎn)碼es6的繼承語(yǔ)法時(shí)為什么給子類(lèi)構(gòu)造函數(shù)設(shè)置__ptoto__?

function _inherits(subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError(
      "Super expression must either be null or a function, not " +
        typeof superClass
    );
  }
  subClass.prototype = Object.create(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      enumerable: false,
      writable: true,
      configurable: true
    }
  });
  if (superClass)
    Object.setPrototypeOf
      ? Object.setPrototypeOf(subClass, superClass)
      : (subClass.__proto__ = superClass);
}

上面是babel轉(zhuǎn)碼后的效果,其中這段代碼

if (superClass)
    Object.setPrototypeOf
      ? Object.setPrototypeOf(subClass, superClass)
      : (subClass.__proto__ = superClass);

問(wèn)題:1.這段代碼不加我覺(jué)得也算實(shí)現(xiàn)繼承了吧?看高程里面貌似也沒(méi)有給子類(lèi)的構(gòu)造函數(shù)設(shè)置__proto__的代碼啊?設(shè)置跟不設(shè)置有多大區(qū)別?

  1. __proto__印象中不是只有對(duì)象才有么?雖然js里面一切皆對(duì)象,但是常見(jiàn)的故事new 出來(lái)的實(shí)例會(huì)講到它的__proto__,函數(shù)的__proto__怎么理解?
回答
編輯回答
青黛色

回答下:通過(guò)查資料理解

if (superClass)
    Object.setPrototypeOf
      ? Object.setPrototypeOf(subClass, superClass)
      : (subClass.__proto__ = superClass);

這段代碼是為了繼承父類(lèi)的靜態(tài)屬性,一般靜態(tài)屬性會(huì)加在構(gòu)造函數(shù)上而不是原型上.

2018年4月9日 01:49