微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在函数内部创建 Extendscript 对象时会失效?

如何解决为什么在函数内部创建 Extendscript 对象时会失效?

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()
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。