EaselJS中的动态舞台名称

时间:2016-01-23 17:28:15

标签: javascript html5 canvas createjs easeljs

我目前正在开发一个旨在同时显示多个画布的网站,而不知道它将提前显示哪些画布(PHP脚本会创建列表)。

这个想法是让(通常)一个处理程序读取多个脚本文件(每个画布一个),这个处理程序将填充各个阶段。

stage = new createjs.Stage(context);

我被困在这里。在我创建一个给定的阶段时,我知道要将其附加到画布的名称(例如,stageA),并且它在名为context的变量中以JavaScript形式提供。在这种情况下,我需要创建一个名为stageA的画架舞台;问题是我事先无法知道我不需要stageB而不是stageA所以创建的阶段名称需要是动态的(等于上下文)。我尝试了一些

的方法
eval(context) = new createjs.Stage(context);

但它没有按原样运作。

(我还需要能够对这个动态命名的阶段进行操作,即能够做到

stageA.update();

例如,不知道stageA被称为stageA,但只是基于上下文。)

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以对windows["stageA"]的全局变量使用括号表示法,或者如果您知道自己处于全局范围this["stageA"]

因此,如果您在全局范围内有一个上下文,并且您有一个带有变量名称的字符串,那么您可以通过括号表示法来访问它

var stageA = // context of canvas
var stageName = "stageA"
var theStage = window[stageName];

现在theStage引用stageA

theStage.clearRect(0,0,100,100); 
// same as
stageA.clearRect(0,0,100,100);

可以通过点表示法(即window.alert braket表示法,即window["alert"]访问所有对象属性。由于braket符号采用字符串,因此可以在其位置使用变量。

另一个例子

   var myObj = {
       attributeA : 10,
   }
   console.log(myObj.attributeA); // output 10;
   console.log(myObj["attributeA"]); // output 10;
   var attributeName  = "attributeA";
   console.log(myObj[attributeName]); // output 10;

全局范围称为window,但大多数人都会删除窗口并直接引用全局范围。 EG window.alertalert相同或window.requestAnimationFramerequestAnimationFrame相同

全局范围也称为this,但您需要知道自己处于全球范围。如果您有信心,那么this["alert"]window["alert"]alertwindow.alertthis.alert如果您在全球范围内,则都是相同的参考。