为什么在函数内部创建时 Extendscript 对象会失效?
Why are Extendscript objects invalidated when created inside a function?
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()
}
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()
}