2

首先:我正在使用一个相当晦涩的嵌入 javascript 实现作为 Adob​​e InDesign CS3 的脚本引擎。这种实现有时与“标准”javascript不同,因此是我的问题。

我正在使用John Resig 的 jsdiff 库来源此处)来比较两个文档之间的文本选择。jsdiff 使用 vanilla 对象作为关联数组来将文本中的单词映射到另一个对象。(参见 jsdiff.js 中的“ns”和“os”变量,第 129 行左右。)

当文本中出现“反射”这个词时,我的头痛就开始了。“反射”是所有对象的默认只读属性。当 jsdiff 尝试将关联数组上的值分配给 ns['reflect'] 时,一切都会爆炸。

我的问题:有没有办法解决这个问题?有没有办法在不使用明显的香草对象的情况下在 javascript 中做一个哈希表?

基本规则:切换脚本引擎不是一种选择。:)

4

3 回答 3

5

你可能“问错了问题”(正如 Raymond Chen 所说);与其尝试避免使用 vanilla 对象,不如尝试更改关联数组成员的命名方式。

我尝试解决这个问题的方式:不存在数组成员 ns["reflect"],而是更改 jsdiff 构建数组的方式,以便成员为 ns["_reflect"] 或其他一些变体。

于 2008-09-19T17:19:12.423 回答
1

如果您使用的 JS 实现支持对象的 hasOwnProperty 方法,您可以使用它来测试是否为对象显式设置了属性,或者该属性是从其原型继承的。例子:

if(object.hasOwnProperty('testProperty')){
     // do something
}
于 2008-09-19T17:46:12.200 回答
0

好的,javascript 中的对象只是关联数组,实际上没有另一个内置的哈希解决方案。您可以通过在一些数组周围包装一个类来创建自己的伪哈希表,尽管所涉及的手动工作可能会对性能造成重大影响。

只是一个旁注,我没有真正使用或查看过 jsdiff 库,所以我无法根据提示或技巧提供任何有效的见解。

于 2008-09-19T17:14:24.663 回答