2

最初に: 私は、Adobe InDesign CS3 のスクリプト エンジンとして埋め込まれた JavaScript のややあいまいな実装を使用しています。この実装は、「標準」の JavaScript から逸脱することがあるため、私の問題です。

John Resig の jsdiff ライブラリ( source here ) を使用して、2 つのドキュメント間で選択したテキストを比較しています。jsdiff は通常のオブジェクトを連想配列として使用して、単語をテキストから別のオブジェクトにマップします。(jsdiff.js の 129 行付近の「ns」変数と「os」変数を参照してください。)

テキストに「反映」という言葉が出てくると、頭痛が始まります。「reflect」は、すべてのオブジェクトのデフォルトの読み取り専用プロパティです。jsdiff が連想配列の値を ns['reflect'] に割り当てようとすると、すべてが爆発します。

私の質問: これを回避する方法はありますか? 明らかなバニラオブジェクトを使用せずにJavaScriptでハッシュテーブルを作成する方法はありますか?

基本原則:スクリプト エンジンを切り替えることはできません。:)

4

3 に答える 3

5

あなたは「間違った質問をしている」かもしれません (Raymond Chen が言うように)。通常のオブジェクトの使用を避けるのではなく、連想配列メンバーの名前の付け方を変更してみてください。

私がこれにアプローチしようとする方法: 配列メンバー 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 に答える