Я работаю над пользовательским видеокодеком для Javascript, который поддерживает прозрачность. Я нахожусь в стадии разработки API для кодека, и я хотел бы максимально соответствовать HTML API видео.
Таким образом, с обычным видео вы можете воспроизводить видео элемент, связывая функцию «play» с самим элементом:
document.getElementById("myVideo").play();
Вы также можете получить доступ к определенным настройкам объекта внутри элемента и изменить их, например, источник видео:
document.getElementById("myVideo").src = "movie.mp4";
Я хочу добиться этого, но с моим собственным пользовательским объектом между элементом HTML и функцией / объектом, на который вы ссылаетесь, чтобы избежать конфликтов имен. На практике это будет выглядеть так:
document.getElementById("myVideo").myObject.play();
document.getElementById("myVideo").myObject.src = "movie.mp4";
Однако я не могу придумать, как заставить эту работу работать, используя тот же myObject. myObject может быть функцией конструктора, которая будет возвращать новый объект, или это может быть объект с функциями / значениями, хранящимися внутри.
Возвращение функции будет хорошо работать для функции play, потому что она может иметь доступ к html-элементу, который ее вызвал.
HTMLElement.prototype.myObject= function(){
var objInstance = {};
objInstance.documentElement = this;
objInstance.play = function() { alert(this.documentElement) };
return objInstance;
}
«this» ссылается на элемент html, который вызвал функцию. Однако выполнение этого означает, что установка attritubute типа "src" не будет работать внешне, потому что функция является только конструктором, который возвращает новый объект. Я также хотел бы, чтобы источник был объектом, который может быть выставлен извне следующим образом:
HTMLElement.prototype.myObject = {
documentElement: HTMLElement,
src: "hi",
play () {
console.log(this.documentElement);
}
}
Теперь я могу редактировать «src» извне и вызывать функцию воспроизведения, однако в этом случае функция воспроизведения больше не имеет доступа к элементу html. Вместо этого documentElement хранит объект окна для всей страницы.
Как я могу реализовать обе эти функции выше в одной переменной?