You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么函数内创建返回的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);

问题表现

代码运行时稳定触发报错:Error Code# 45: Object is invalid
具体流程为:第一次调用addControl生成滑块1并存储为Slider1引用后,首次读取Slider1.name可以正常输出值;等到第二次调用生成滑块2Slider2完成,再尝试读取Slider1.name时,原来的Slider1引用已经直接变为[Invalid Object]状态,抛出对象失效错误。

排查过程与困惑

  • 按照通用JavaScript规则,对象本应按引用传递,正常存储的引用不该被意外清空或置为无效
  • 本来预期addProperty方法会生成完全独立的全新效果对象,新建第二个效果根本不会影响之前已经存好的引用
  • 试过在函数内部给newCtrl加上var关键字声明为严格局部变量,该失效问题还是会稳定复现,和变量的作用域声明完全无关
  • 目前只能大致猜测问题可能和ExtendScript的特殊引用机制、宿主程序的垃圾回收逻辑相关,但始终无法解释对象失效的根本原因

内容的提问来源于stack exchange,提问作者Kez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 00:45:07