为什么在函数内部创建Extendescript对象时会使其无效


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);

错误代码#45:对象无效

在创建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()
}

相关内容

  • 没有找到相关文章

最新更新