/**
 * @파일 확장.js
 * @모듈 확장
 */

import _inherits from '@babel/runtime/helpers/inherits';
'./utils/log.js'에서 로그 가져오기;

let hasLogged = false;

/**
 * ES 서브클래싱을 에뮬레이션하여 기존 클래스를 서브클래싱하는 데 사용됨
 * `extends` 키워드.
 *
 * @기능
 * @deprecated
 * @예
 * var MyComponent = videojs.extend(videojs.getComponent('컴포넌트'), {
 * myCustomMethod: 함수() {
 * // 내 메서드에서 작업을 수행합니다.
 * }
 * });
 *
 * @param {함수} 수퍼클래스
 * 상속받을 클래스
 *
 * @param {객체} [subClassMethods={}]
 * 새로운 클래스의 메서드
 *
 * @return {함수}
 * superClass를 상속받은 subClassMethods가 있는 새 클래스.
 */
const extend = function(superClass, subClassMethods = {}) {

  // extend가 더 이상 사용되지 않음을 알리기 위해 처음 호출될 때 경고를 기록합니다.
  // 이전에는 설명서(특히 가이드)에서 더 이상 사용되지 않습니다.
  // 그러나 코드에서 공식적으로 사용되지 않습니다.
  if (!hasLogged) {
    log.warn('videojs.extend는 Video.js 7.22.0부터 사용되지 않으며 Video.js 8.0.0에서 제거됩니다.');
    hasLogged = 참;
  }

  let 서브클래스 = function() {
    superClass.apply(this, 인수);
  };

  let 메소드 = {};

  if (typeof subClassMethods === '개체') {
    if (subClassMethods.constructor !== Object.prototype.constructor) {
      subClass = subClassMethods.constructor;
    }
    방법 = subClassMethods;
  } 그렇지 않으면 (typeof subClassMethods === '함수') {
    하위 클래스 = 하위 클래스 방법;
  }

  _inherits(서브클래스, 슈퍼클래스);

  // 이전 버전과의 호환성 및 노드 호환성을 위해 필요합니다.
  if(수퍼클래스) {
    subClass.super_ = 수퍼클래스;
  }

  // props의 함수 및 기타 속성으로 subObj의 프로토타입을 확장합니다.
  for (메서드의 상수 이름) {
    if (methods.hasOwnProperty(이름)) {
      subClass.prototype[이름] = 방법[이름];
    }
  }

  하위 클래스를 반환합니다.
};

수출 기본 확장;