问题标签 [ecmascript-3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
647 浏览

javascript - ES3 的 Javascript getter/setter

我有以下功能,我正在尝试在 Photoshop 中实现(使用 Javascript ES3 编写脚本)。我怎么能把它写成与 ES3 兼容?

0 投票
0 回答
30 浏览

javascript - 在 Photoshop 中深度克隆 JavaScript 1.5 数据

如何以“旧方式”深度克隆对象数组。换句话说,在引入现代方法之前,像JSON.parseassignextendspread operator这样的原生方法。

该解决方案适用于某些 Photoshop 脚本。Adobe 仍在使用 JS v1.5(或 ECMAScript 3)——这意味着自 2000 年以来的任何 JS 功能都不是原生的。理想的解决方案是深度克隆,但避免使用 Photoshop 特定对象,例如“图层”(最后会详细介绍)。

或者,模拟现代功能的轻量级库也可以。我已经尝试过这个 JSON2 实现,但遇到了以下错误:

我遇到了这个 JSON 资源,但该指南似乎令人生畏,所以我还没有走多远。

对象数组当前的结构如下:

理想情况下,将克隆除“layerObjects”之外的所有上述内容。不应克隆 layerObjects,因为它们是对需要跟踪和操作的屏幕 Photoshop 元素的引用。

0 投票
1 回答
2318 浏览

javascript - 如何将对象从 Javascript (Adobe CEP) 传递给 Adob​​e ExtendScript?

我正在使用Adob​​e CEP(它允许开发人员为 Adob​​e CC 产品创建窗口扩展)。我的大部分代码是现代 JavaScript(该平台使用 Chromium 57、Node.js 7.7.4)。 但是,为了访问 DOM,我需要在 Adob ​​e ExtendScript中编写一些函数并从普通 JS 中执行它们。唯一的方法是使用他们提供的csInterface.evalScript(script, callback). script必须是一个字符串,在我的例子中是一个转换为字符串的函数调用。我希望能够通过 ExtendScript 将对象传入和传出evalScript,但evalScript只接受并返回一个字符串。

目前,我将每个对象属性作为其自己的参数传递。这很笨拙,但它有效。

我的第一个虽然是JSON.stringify(),但不幸的是,ExtendScript 是 ECMAScript 3 的方言,这意味着JSON.parse()支持

我不能只是将对象参数连接到脚本函数调用中,因为这样字符串的计算结果为foo([object Object]).

我已经看到有eval()/ uneval()or之类的功能Object.toSource(),但是 Chromium 不支持这些功能。

这是一个示例,类似于我当前的方法:

函数.js (ES3/ExtendScript)

应用程序.js (ES6)

正如预期的那样,circle()调用drawCircle()很好,并且我正在处理的文档中出现一个椭圆。但是,通过连接执行脚本/调用函数感觉非常错误。所以总而言之,

  1. 我想要一些(更整洁的)方式dataObject变成字符串并将其传递给drawCircle()via evalScript()
  2. 我想dataObject从那里返回drawCircle()并作为一个对象接收它。目前,返回一个对象只会产生"[object Object]"一个返回值。
0 投票
0 回答
186 浏览

javascript - 在 JS (ES3) 上返回带有对象上下文的对象方法

我有这个代码:

当我funcOne使用此实现调用时,其中的上下文funcOne是函数本身,而不是Selector实例。如何通过以这种方式调用 funcOne 来维护实例的上下文?

编辑:我正在使用 Extendscript,这是一个 ES3 环境,所以我不能使用 bind() 或箭头函数。我确切需要的是能够分别传递所选函数的参数,因为这个想法一方面是能够选择具有多个不同参数的不同函数,另一方面是能够使用括号语法进行链式调用:

所以使用指向实例的指针也无济于事,因为上下文的问题仍然存在:

0 投票
2 回答
357 浏览

csv - 在 ExtendScript 中将 CSV 解析为 2D 数组(符合 ES3)

我在 Adob​​e 的 ExtendScript 中解析 Vimeo 评论页面格式的 CSV 时遇到问题。问题是 ExtendScript 基于 ES3 并且大多数解决方案似乎都不起作用,因为它们基于现代 JS。

此外,CSV 有一个标题行、末尾的空行、一些但不是所有字段(我想删除)的双引号以及字段中潜在的换行符和特殊字符(包括逗号)。有没有办法得到一个“干净的”二维数组?

我在这里尝试过解决方案:解析 CSV 数据的 Javascript 代码 在 这里:如何使用 Javascript 解析 CSV 字符串,其中包含数据中的逗号?

但无法让它们工作,我认为这些问题与 ExtendScript 过时有关。

CSV 文件

如果我用 解析split("\n"),带有换行符的字段会被拆分。如果我使用split(",")任何带逗号的字段,则会被拆分。

另外,我想将解析函数包含在内(在主脚本中,而不是加载外部脚本),因为我更喜欢在部署时使用单个文件。

谢谢,PJ

0 投票
1 回答
135 浏览

javascript - 如何运行/测试 ECMAScript 3 JavaScript 代码?

我正在开发 ExtendScript,它目前支持 ECMAScript 3。有没有办法可以在ECMAScript 3版本引擎中运行或测试一些片段?

我的意思是如何检查我编写的代码是否受支持ECMAScript 3

0 投票
0 回答
51 浏览

javascript - TSConfig 目标 es3 已设置,但仍使用 system.register。如何解决这个问题?

我正在使用 Typescript 开发网站并尽量避免使用 ECMASCRIPT > ES5,因为我开发的网站旨在在 Opera 11 浏览器上运行。为此,我尝试将 -in 设置compilerOptions为低版本,在这种情况下设置target为.tsconfig.jsonES3

最初弹出以下错误:

未捕获的 ReferenceError:系统未定义

我通过包含从https://github.com/systemjs/systemjs下载的文件来修复它。

不应该生成 system.register 是真的吗?

如果有不清楚的地方,请告诉我。先感谢您!

0 投票
1 回答
455 浏览

macos - 如何检查 MacOS 终端中的互联网连接是否可用?

我使用了 Ping命令:

如果在线效果很好,但如果互联网不可用或 LAN 关闭,终端需要很长时间才能回复结果..

我希望终端在最长 1 秒或 0.5 秒内回复以使用结果

扩展脚本代码:

我尝试使用 -t 或 -W 设置超时但失败了

编辑:

感谢 Philippe,解决方案是:

0 投票
0 回答
160 浏览

javascript - MS 脚本控件中的 JavaScript 数组操作

这是一个 JavaScript 问题,但是……我的目标是使用 Excel VBA 中的 Microsoft Script Control 来执行数组操作。脚本控件使用 MS JScript,大致相当于 ES3,但没有窗口对象。

当我说数组操作时,我的意思是......如果 [a] 是一个由 100 个数字组成的数组,而 [b] 是一个由另外 100 个数字组成的数组,我正在寻找的是让 JScript 返回一个新数组 [c] 100 个数字,每个元素等于对 [a] 和 [b] 的指定操作,逐个元素。

我在下面编写的代码工作得很好。但...

我想添加更多的操作,但我很沮丧的是,每个操作的每个 JScript 函数都与所有其他操作完全相同,只有微小但至关重要的差异。例如 sum()、sub()、mul() 和 div() 函数之间的唯一区别是相应的运算符:+=-=*=/=。这四个函数中的其余代码是 100% 重复的。

问题 #1:如何更通用地编写 JScript 以减少重复代码?

问题 #2:我怎样才能使这项工作不仅仅适用于两个输入数组,目前是 [a] 和 [b]?我最好让 JScript 操作函数接受动态数量的数组,例如对输入数组的 AVERAGE 操作。

我的VB技能很高。我的 JavaScript 技能不是。请记住,JavaScript 代码本质上必须是 ES3。

0 投票
1 回答
88 浏览

javascript - JavaScript 从两个到多个函数参数重构

这两个 JavaScript 函数每个都接受两个数组参数并返回一个数组结果。符合 ES3,我如何重写这些以接受不定数量的数组输入?


奇数jsArray()函数是必需的,因为要处理的数组来自 VBA,而 jsArray() 将它们转换为 JavaScript 数组: