/**
 * @文件擴展.js
 * @module 擴展
 */

從“@babel/runtime/helpers/inherits”導入_inherits;
從 './utils/log.js' 導入日誌;

讓 hasLogged = false;

/**
 * 用於通過使用
 * `extends` 關鍵字。
 *
 * @功能
 * @棄用
 * @例子
 * var MyComponent = videojs.extend(videojs.getComponent('Component'), {
 * 我的自定義方法:函數(){
 * // 在我的方法中做事。
 * }
 * });
 *
 * @param {Function} 超類
 * 要繼承的類
 *
 * @param {Object} [subClassMethods={}]
 * 新類的方法
 *
 * @return {函數}
 * 具有繼承超類的子類方法的新類。
 */
const extend = function(superClass, subClassMethods = {}) {

  // 第一次調用 extend 時記錄警告以注意它已被棄用
  // 它之前在我們的文檔(特別是指南)中已棄用,
  // 但從未在代碼中正式棄用。
  如果(!hasLogged){
    log.warn('videojs.extend 已從 Video.js 7.22.0 開始棄用,並將在 Video.js 8.0.0 中刪除');
    hasLogged = 真;
  }

  讓子類=函數(){
    superClass.apply(this, arguments);
  };

  讓方法 = {};

  如果(typeof subClassMethods ==='object'){
    if (subClassMethods.constructor !== Object.prototype.constructor) {
      subClass = subClassMethods.constructor;
    }
    方法=子類方法;
  } else if (typeof subClassMethods === '函數') {
    子類 = 子類方法;
  }

  _繼承(子類,超類);

  // 這是向後兼容性和節點兼容性所必需的。
  如果(超類){
    subClass.super_ = superClass;
  }

  // 使用 props 的函數和其他屬性擴展 subObj 的原型
  for(方法中的常量名稱){
    如果(方法.hasOwnProperty(名稱)){
      subClass.prototype[名稱] = 方法[名稱];
    }
  }

  返回子類;
};

導出默認擴展;