/**
 * @파일 트랙.js
 */
import * as Guid from '../utils/guid.js';
'../event-target'에서 EventTarget 가져오기;

/**
 * {@link AudioTrack}의 모든 공통 기능을 포함하는 트랙 클래스,
 * {@link VideoTrack} 및 {@link TextTrack}.
 *
 * > 메모: 이 클래스는 직접 사용하면 안 됩니다.
 *
 * @see {@link https://html.spec.whatwg.org/multipage/embedded-content.html}
 * @extends 이벤트 타겟
 * @추상적인
 */
클래스 추적은 EventTarget을 확장 {

  /**
   * 이 클래스의 인스턴스를 만듭니다.
   *
   * @param {객체} [옵션={}]
   * 옵션 이름 및 값의 개체
   *
   * @param {문자열} [옵션.종류='']
   * 생성 중인 트랙 유형에 유효한 종류입니다.
   *
   * @param {string} [options.id='vjs_track_' + Guid.newGUID()]
   * 이 AudioTrack의 고유 ID입니다.
   *
   * @param {문자열} [옵션.라벨='']
   * 이 트랙의 메뉴 레이블입니다.
   *
   * @param {문자열} [옵션.언어='']
   * 유효한 두 문자 언어 코드입니다.
   *
   * @추상적인
   */
  생성자(옵션 = {}) {
    감독자();

    const trackProps = {
      아이디: options.id || 'vjs_track_' + Guid.newGUID(),
      종류: options.kind || '',
      언어: options.language || ''
    };

    let label = options.label || '';

    /**
     * @memberof 트랙
     * @멤버 {문자열} 아이디
     * 이 트랙의 ID입니다. 생성 후에는 변경할 수 없습니다.
     * @사례
     *
     * @읽기전용
     */

    /**
     * @memberof 트랙
     * @member {문자열} 종류
     * 이것이 트랙의 종류입니다. 생성 후에는 변경할 수 없습니다.
     * @사례
     *
     * @읽기전용
     */

    /**
     * @memberof 트랙
     * @member {문자열} 언어
     * 이 트랙의 두 글자 언어 코드입니다. 이후 변경 불가
     * 창조.
     * @사례
     *
     * @읽기전용
     */

    for (trackProps의 const 키) {
      Object.defineProperty(이것, 키, {
        얻다() {
          return trackProps[키];
        },
        세트() {}
      });
    }

    /**
     * @memberof 트랙
     * @member {문자열} 라벨
     * 이 트랙의 레이블입니다. 생성 후에는 변경할 수 없습니다.
     * @사례
     *
     * @fires Track#labelchange
     */
    Object.defineProperty(이것, '라벨', {
      얻다() {
        반품 라벨;
      },
      설정(newLabel) {
        if (newLabel !== 레이블) {
          레이블 = newLabel;

          /**
           * 이 트랙에서 레이블이 변경될 때 실행되는 이벤트입니다.
           *
           * > 메모: 이것은 사양의 일부가 아닙니다!
           *
           * @event Track#labelchange
           * @type {이벤트대상~이벤트}
           */
          this.trigger('labelchange');
        }
      }
    });
  }
}

기본 트랙 내보내기;