什么是避免对象命名空间冲突的javascript哈希表实现?

什么是避免对象命名空间冲突的javascript哈希表实现?,javascript,hash,diff,adobe-indesign,Javascript,Hash,Diff,Adobe Indesign,首先:我使用一个相当模糊的javascript嵌入式实现作为AdobeInDesign CS3的脚本引擎。这个实现有时与“标准”javascript不同,因此我的问题就来了 我使用()来比较两个文档之间的文本选择。jsdiff使用普通对象作为关联数组,将一个单词从文本映射到另一个对象。(请参阅jsdiff.js中第129行附近的“ns”和“os”变量。) 我最头疼的是,当“反射”这个词出现在课文中时。“reflect”是所有对象上的默认只读属性。当jsdiff试图将关联数组上的值赋给ns['re

首先:我使用一个相当模糊的javascript嵌入式实现作为AdobeInDesign CS3的脚本引擎。这个实现有时与“标准”javascript不同,因此我的问题就来了

我使用()来比较两个文档之间的文本选择。jsdiff使用普通对象作为关联数组,将一个单词从文本映射到另一个对象。(请参阅jsdiff.js中第129行附近的“ns”和“os”变量。)

我最头疼的是,当“反射”这个词出现在课文中时。“reflect”是所有对象上的默认只读属性。当jsdiff试图将关联数组上的值赋给ns['reflect']时,所有内容都会爆炸

我的问题是:有办法解决这个问题吗?有没有一种方法可以在javascript中创建哈希表而不使用明显的香草对象


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

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

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

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


我尝试的方法是:改变jsdiff构建数组的方式,使其成员为ns[“_reflect”]或其他变体,而不是数组成员ns[“reflect”]。

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

if(object.hasOwnProperty('testProperty')){
     // do something
}

我问了这个问题后不久就拍了拍额头。当然,这就成功了。谢谢