Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/JQUery动态变量访问_Javascript_Jquery - Fatal编程技术网

Javascript/JQUery动态变量访问

Javascript/JQUery动态变量访问,javascript,jquery,Javascript,Jquery,我有一个javascript变量,它引用一个复杂的对象(它是一个幻灯片控件,但这并不重要) 因为我在页面上有多个幻灯片,我希望在不同页面中访问某些操作通用/重用代码 我希望能够在同一JAVASCRIPT例程中访问包含不同幻灯片实例的不同变量。使用的变量不同,具体取决于当时控制的幻灯片放映 所以不是 slideshow.playSlides(); 做点像 [dynamically get reference to variable containing slideshow].playSlides

我有一个javascript变量,它引用一个复杂的对象(它是一个幻灯片控件,但这并不重要)

因为我在页面上有多个幻灯片,我希望在不同页面中访问某些操作通用/重用代码

我希望能够在同一JAVASCRIPT例程中访问包含不同幻灯片实例的不同变量。使用的变量不同,具体取决于当时控制的幻灯片放映

所以不是

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,我们都想出了一些不同的方法,我有点喜欢不命名实例。有人应该从中得到一些东西。:)