Javascript / JQUery динамический доступ к переменным - PullRequest
0 голосов
/ 01 мая 2009

У меня есть переменная javascript, которая ссылается на сложный объект (это элемент управления слайд-шоу, но это не важно)

e.g.
var slideshow = new SlideShow();

Поскольку у меня есть несколько слайд-шоу на странице, и я хочу сделать доступ к определенным операциям универсальным / повторно использовать код на разных страницах.

Я хочу быть в состоянии получить доступ к различным переменным, содержащим различные экземпляры слайд-шоу в той же программе JAVASCRIPT. ИСПОЛЬЗУЕМЫЕ ПЕРЕМЕННЫЕ РАЗЛИЧНЫ В ЗАВИСИМОСТИ ОТ ТОГО, ЧТО СЛАЙД-ШОУ КОНТРОЛИРУЕТСЯ В ВРЕМЯ.

Так что вместо

slideshow.playSlides();

сделать что-то вроде

[dynamically get reference to variable containing slideshow].playSlides();

Я уже рассматривал это в JavaScript и не нашел решения, мне интересно, можно ли это как-нибудь сделать в JQUERY?

Ответы [ 4 ]

1 голос
/ 01 мая 2009

Я собираюсь добавить совершенно другое решение, которое, я думаю, имеет гораздо больше смысла:

Как я уже сказал, что-то должно содержать переменную

Если это элемент управления, который отображается браузером. Я бы повесил экземпляр на элемент, который представляет элемент управления. В идеале вы назначаете какой-то класс для элемента. Так что после этого все довольно просто.

$('.theslideshowclass').each(function() {
   this.slideshow = new SlideShow();
});

Это решение в стиле jQuery. Я разочарован, я не делал это в первый раз.

1 голос
/ 01 мая 2009

Ну ... что-то должно содержать переменную, так что это вопрос, на который вам нужно ответить в первую очередь. Я хотел бы сохранить его в хэше, который на первый взгляд может не сильно отличаться от вас:

var slideshows = {};    
slideshows['someslideshowName'] = new SlideShow();

Но теперь вы можете ссылаться по имени без проблем.

или это может выглядеть как ....

window.slideshows = {};
var slideShowName = 'someSlideShowName';
window.slideshows[slideShowName] = new SlideShow();
1 голос
/ 01 мая 2009

Если я понимаю вопрос, почему бы не создать массив слайд-шоу и перечислить их, чтобы у вас было от 0 до N слайд-шоу и вам не нужно перекодировать.

var slideshows = [new SlideShow()];

function playSlides() {
   for(var i=0; i < slideshows.length; i++) {
       slideshows[i].playSlides();
   }
}
0 голосов
/ 01 мая 2009

Если это глобальная переменная, вы можете использовать объект window:

var name = 'slideshow';
window[name].playSlides();

Обычно такого рода вещи не обязательны - вы, вероятно, должны передавать свою переменную slideshow. Чего ты пытаешься достичь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...