在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ babel轉碼es6的繼承語法時為什么給子類構造函數(shù)設置__ptoto__?

babel轉碼es6的繼承語法時為什么給子類構造函數(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轉碼后的效果,其中這段代碼

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

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

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

回答下:通過查資料理解

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

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

2018年4月9日 01:49