Вы можете заключить его в один объект и использовать каррирование, чтобы скрыть несколько глобальных функций.Допустим, у вас есть глобальный объект с методом dispatchEvent.
Player = {};
Player.dispatchEvent = function(id) {
var player = document.getElementById(id);
return function(newState) {
console.log("player id %s changed state to %s", id, newState);
};
};
Затем добавьте вызов dispatchEvent в виде строки с правильным идентификатором при добавлении прослушивателя события изменения состояния.
var call = 'Player.dispatchEvent("{id}")'.replace("{id}", somePlayerId);
ytplayer.addEventListener('onStateChange', call);
Когда строка проверяется Youtube, она возвращает ссылку на анонимную функцию, которая удерживает идентификатор игрока через замыкание, и получает параметр изменения состояния в следующем вызове.
Я написал небольшой класс YoutubePlayer , вдохновленный этой статьей blog , для воспроизведения нескольких видео и обработки событий каждого из них в отдельности при сохранении глобального состояния.минимальный, который может оказаться полезным.