问题描述
function addControl(layer,name){
newCtrl = layer("Effects").addProperty("Slider Control");
newCtrl.name = name;
return newCtrl;
}
var Slider1 = addControl(ExistingLayer,"slider 1");
$.write(Slider1.name);
var Slider2 = addControl(ExistingLayer,"slider 2");
$.write(Slider1.name);
在创建 Slider2 后尝试访问 Slider1.name 会导致错误,因为 Slider1 现在是 [无效对象]
我觉得这与引用和垃圾收集有关,但由于 javascript 对象应该作为引用传递并且“addProperty”应该创建一个新对象,我不明白为什么。
无论有没有'var'关键字,我都应该添加它失败
解决方法
这是因为糟糕的 API。一旦您添加或删除了一个属性,如对图层的效果,或对合成的图层,对该图层中的所有效果或合成中的图层的任何引用都将无效。您必须跟踪图层上的所有当前效果并通过索引引用它们,或者向它们添加标识属性,并循环访问与标识符匹配的可用属性。比如在创建效果时
newCtrl.identifier = "ctrl"+ id; //where id is a unique string or number
然后遍历图层的效果并查找标识符
if (thisEffect.identifier === "ctrl"+ id){
dostuff()
}