javascript - 为什么在函数内部创建 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 现在是 [Invalid Object]
我觉得这与引用和垃圾收集有关,但由于 javascript 对象应该作为引用传递并且“addProperty”应该创建一个新对象,我不明白为什么。
我应该添加它失败,有和没有'var'关键字
解决方案
这是因为糟糕的 API。一旦您添加或删除了某个属性(如对图层的效果或对合成的图层),对该图层中的所有效果或合成中的图层的任何引用都将无效。您必须跟踪图层上的所有当前效果并通过索引引用它们,或者向它们添加标识属性,并循环通过与标识符匹配的可用属性。例如,在创建效果时
newCtrl.identifier = "ctrl"+ id; //where id is a unique string or number
然后你遍历层的效果并寻找标识符
if (thisEffect.identifier === "ctrl"+ id){
dostuff()
}
推荐阅读
- javascript - JS过滤功能问题
- node.js - nodejs 中的 post 请求不返回任何护照身份验证
- ios - Godot 导出到 IOS 失败
- java - 与 Postman 相比,CloseableHttpClient 的预期性能是多少
- javascript - 如何从字典中制作 JSON 对象?
- javascript - chrome扩展链接不显示背景
- excel - 在 Excel 中创建目录的论坛
- delphi - Delphi 错误“E2064 左侧无法分配给”64 位
- python - 从字典中的列表创建表和排序数据
- javascript - 为什么“this”关键字指的是传递的参数?