Почему контекст «this» не является неявным внутри класса (в отличие от документации MDN)?Javascript

Форум по Javascript
Ответить
Anonymous
 Почему контекст «this» не является неявным внутри класса (в отличие от документации MDN)?

Сообщение Anonymous »

Я понятия не имею, что происходит с выполнением Javascript. Javascript не моя сильная сторона, но вы должны использовать его при создании веб-сайтов, поэтому я не совсем невежественен, и у нас есть много Javascript/jQuery, прикрепленных к сайту WordPress. Соблюдаются все правила для правильной постановки в очередь, а jQuery включен для обеспечения выполнения doc.ready и noConflict.
Мы просто интегрируем новый MUX-видеоплеер, который действительно хорош, но страдает от «недостатка», заключающегося в том, что некоторые свойства в данный момент доступны только с помощью JavaScript. Один из моих коллег создал прототип кода, и я, преклоняясь перед богом инкапсуляции, подумал: этот фрагмент кода действительно принадлежит к отдельному классу:

Код: Выделить всё

class KCM_MUX {

lang;
player;

constructor(lang, player){
this.lang = lang;
this.player = player;
this.setLanguage();
}

// the actual code returned will depend on how the file has been uploaded.
norm = s => (s || '').toLowerCase().split('-')[0]; // "de-DE" -> "de"
// player = document.getElementById('muxPlayer');

#setAudio() {

const list = this.player.audioTracks; // Mux-provided AudioTrackList
if (!list || list.length === 0) return;
let matched = false;

for (let i = 0; i < list.length; i++) {
const t = list[i];
// check the language and label - this will be defined on upload
const code = this.norm(t.language) || this.norm(t.label);
const on = code && code.startsWith(this.lang);
t.enabled = on;
if (on) matched = true;
}
// If nothing matched, ensure at least the first track is enabled.
if (!matched) {
list[0] && (list[0].enabled = true);
}
}

#setSubs () {

const tt = this.#getTextTracks();

if (!tt) return;

for (let i = 0; i < tt.length; i++) {
const t = tt[i];
const isCaption = t.kind === 'captions' || t.kind === 'subtitles';
if (!isCaption) continue;
const code = this.norm(t.language) || this.norm(t.label);
t.mode = code && code.startsWith(this.lang) ? 'showing' : 'disabled';
}
}

#getTextTracks() {
return this.player.textTracks || this.player.media?.nativeEl?.textTracks || null;
}

setLanguage(event) {
this.#setAudio();
this.#setSubs();
}

}
Теперь, просматривая документацию по MDN, кажется, что слово «this» не должно быть необходимым для вызова процедур, внутренних по отношению к классу, из самого класса, поэтому конструктор должен просто иметь возможность вызывать setLanguage(), и мы должны иметь возможность вызыватьnormal(), getTextTracks и т. д. без «this»? Я неправильно понимаю, но код не будет выполняться без всех этих префиксов this.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ass-contra
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»