这个问题已经在这里有一个答案:
- JavaScript的闭包内环路-简单实用的例子 44个回答
使用CreateJS,我有输出与各种对象的实例画布,以各种方式制作动画。 几乎所有好的工作,除了一个问题,我认为这是一个范围的问题,但我不知道如何解决。 我具有由“_pulsars”,包含对象“脉冲星”的11个实例引用一个实例,代码运行是这样的:
function attachPulseFuncs() {
var defaultFreq = 0.05; // controls the likelihood of a 'pulse' happening
for (var i = 0; i < _pulsars.children.length; i++) {
var myParent = _pulsars.children[i];
myParent.isPulsing = false;
_myParent.pulse = function() {
if (myParent.isPulsing == false) {
myParent.isPulsing = true;
myParent.__frame = 1
var tween = createjs.Tween.get(myParent).to({__frame:65}, 1500).call(myParent.resetPulse);
tween.addEventListener("change", function() {
myParent.gotoAndStop(myParent.__frame);
});
}
}
myParent.resetPulse = function() {
myParent.gotoAndStop(1);
myParent.isPulsing = false;
}
myParent.callRandomPulse = function() {
var ran = Math.random();
if (ran < freqNumber) {
myParent.pulse();
}
}
createjs.Ticker.addEventListener("tick", myParent.callRandomPulse);
}
}
什么情况是,只有最后的脉冲星动画(无论多少都是组)。 我不知道是否是因为只有一个事件侦听器被附? 或以某种方式所有的听众都被添加到一个“脉冲星”? 请帮忙!
编辑:成功了! 感谢罗伯特(也BERGI的链接到类似的问题),我被扶了解一点关于关闭和解除绑定变量被传递到功能 - 如其他线程上的链接说:
“如果我们通过一个参数[该]功能使变量的其自己的本地副本(如果它不反对其通过引用传递型)”
这允许每个脉冲星具有由myParent的每次迭代所限定,而不是被关由myParent的最终值的单个外范围的基准的离散参考到其父。 (@Robert Koritnik请让我知道,如果我有误解或这是不正确!感谢您的帮助,如果我不是那么新的网站我会+1。很快,希望)