Javascript/JQUery动态变量访问
我有一个javascript变量,它引用一个复杂的对象(它是一个幻灯片控件,但这并不重要) 因为我在页面上有多个幻灯片,我希望在不同页面中访问某些操作通用/重用代码 我希望能够在同一JAVASCRIPT例程中访问包含不同幻灯片实例的不同变量。使用的变量不同,具体取决于当时控制的幻灯片放映 所以不是Javascript/JQUery动态变量访问,javascript,jquery,Javascript,Jquery,我有一个javascript变量,它引用一个复杂的对象(它是一个幻灯片控件,但这并不重要) 因为我在页面上有多个幻灯片,我希望在不同页面中访问某些操作通用/重用代码 我希望能够在同一JAVASCRIPT例程中访问包含不同幻灯片实例的不同变量。使用的变量不同,具体取决于当时控制的幻灯片放映 所以不是 slideshow.playSlides(); 做点像 [dynamically get reference to variable containing slideshow].playSlides
slideshow.playSlides();
做点像
[dynamically get reference to variable containing slideshow].playSlides();
我以前在JavaScript中研究过这一点,但没有找到解决方案,我想知道这是否可以在JQUERY中以某种方式实现?如果它是一个全局变量,您可以使用
窗口
对象:
var name = 'slideshow';
window[name].playSlides();
不过,通常这种事情是不必要的-您可能应该传递
幻灯片
变量。您想要实现什么?如果它是一个全局变量,您可以使用窗口
对象:
var name = 'slideshow';
window[name].playSlides();
不过,通常这种事情是不必要的-您可能应该传递
幻灯片
变量。你想达到什么目的?嗯。。。有些东西必须包含变量,所以这是您首先需要回答的问题。我的想法是将其存储在一个散列中,一开始对您来说可能没有什么不同:
var slideshows = {};
slideshows['someslideshowName'] = new SlideShow();
但现在您可以通过名称引用,而不会出现任何问题
或者看起来像
window.slideshows = {};
var slideShowName = 'someSlideShowName';
window.slideshows[slideShowName] = new SlideShow();
嗯。。。有些东西必须包含变量,所以这是您首先需要回答的问题。我的想法是将其存储在一个散列中,一开始对您来说可能没有什么不同:
var slideshows = {};
slideshows['someslideshowName'] = new SlideShow();
但现在您可以通过名称引用,而不会出现任何问题
或者看起来像
window.slideshows = {};
var slideShowName = 'someSlideShowName';
window.slideshows[slideShowName] = new SlideShow();
如果我理解了这个问题,为什么不创建一个幻灯片数组并枚举它们,这样您就有0到N个幻灯片,而不需要重新编码
var slideshows = [new SlideShow()];
function playSlides() {
for(var i=0; i < slideshows.length; i++) {
slideshows[i].playSlides();
}
}
var SlideShow=[new SlideShow()];
函数playsiles(){
对于(变量i=0;i
如果我理解了这个问题,为什么不创建一个幻灯片数组并枚举它们,这样您就可以进行0到N次幻灯片放映,而不需要重新编码
var slideshows = [new SlideShow()];
function playSlides() {
for(var i=0; i < slideshows.length; i++) {
slideshows[i].playSlides();
}
}
var SlideShow=[new SlideShow()];
函数playsiles(){
对于(变量i=0;i
我将添加一个完全不同的解决方案,我认为它更有意义:
正如我所说,有些东西必须包含变量
如果它是由浏览器渲染的控件。我将挂起表示控件的元素的实例。理想情况下,您将为元素分配某种类型的类。所以,在那之后就很简单了
$('.theslideshowclass').each(function() {
this.slideshow = new SlideShow();
});
这是jQuery风格的解决方案。我很失望我第一次没有这样做。我将添加一个完全不同的解决方案,我认为它更有意义: 正如我所说,有些东西必须包含变量 如果它是由浏览器渲染的控件。我将挂起表示控件的元素的实例。理想情况下,您将为元素分配某种类型的类。所以,在那之后就很简单了
$('.theslideshowclass').each(function() {
this.slideshow = new SlideShow();
});
这是jQuery风格的解决方案。我很失望,我第一次没有这样做。注意,使用“直窗”的危险在于,您将覆盖Windows的某些不想覆盖的属性。将其设置为子属性(我的答案基本上就是这样做的。(不是子属性,只是窗口的一个已知为空的特定属性)注意,使用straight window的危险在于您将覆盖窗口的一些您无意覆盖的属性。将其设为子属性(我的答案基本上就是这样做的)。(不是子属性,只是窗口的一个已知为空的特定属性)如何实例化多个幻灯片?“代码中没有对其变量名称的引用”这句话真的很让人困惑,因为从字面上看,你是说变量根本不存在。不太清楚…你不能把幻灯片传送到一个函数中吗?“代码中没有引用它的变量名”-是的,措辞很糟糕,道歉你是在实例化多个幻灯片吗?“在代码中没有引用其变量名”这句话确实令人困惑,因为从字面上看,你是说该变量根本不存在。不太清楚……你不能只将幻灯片传递到函数中吗?“而在代码中没有引用其变量名"-是的,措辞糟糕,道歉。我认为我在这个问题上的脑子坏了。我们都有不同的解释。var声明后面必须有一个法律标识符。初始化对象上的属性不需要“var”。我认为我在这个问题上的脑子坏了。我们都有不同的解释。var声明后面必须有一个legal标识符。初始化对象上的属性不需要'var'+1,我们都想出了一些不同的方法,我有点喜欢不命名实例。有人应该从中得到一些东西。:/1,我们都想出了一些不同的方法,我有点喜欢不命名实例。有人应该从中得到一些东西。:)