Переменные в JavaScript являются областью действия функции, поэтому, когда функция обратного вызова, переданная в $ ('. Container'). Ready (), завершается, переменная, которую вы объявили в этой функции, v, выходит за пределы области видимости и может быть очищена коллекция.
Один из способов избежать этого - объявить глобальную переменную и сохранить в ней ваш объект Video. Например:
var v; // Global, because it is declared outside any function
$(document).ready(function() {
$('.container').ready(function() {
v = new Video($(this));
v.load();
});
});
Конечно, глобальные переменные, по крайней мере, доставляют столько же проблем в JavaScript, как и в любом другом языке (может быть, даже больше). Рекомендуется объявлять ровно одну глобальную переменную, объект, для всей вашей страницы / приложения и хранить все и все ваши постоянные данные в этом объекте. Вы хотите дать этому одиночному глобальному имени имя, которое, вероятно, будет уникальным, чтобы оно не конфликтовало с какими-либо сторонними сценариями, которые вы можете использовать. Мне нравится использовать соглашение, используемое с пространствами имен Java для использования зарегистрированного доменного имени, связанного с работой, в качестве уникального идентификатора. Так что если вы или ваш работодатель владеете доменным именем examplename.com:
if (! window.examplename) {
window.examplename = {};
}
examplename.videos = [];
...
$(document).ready(function() {
$('.container').ready(function() {
var v = new Video($(this));
v.load();
examplename.videos.push(v);
});
});
В другом месте в вашем коде доступ к видеообъектам выглядит так:
$.each(examplename.videos, function(idx, vid) {
vid.someMethod();
});