O que é um javascript hash de tabela de implementação que evita objeto conflitos de namespace?

StackOverflow https://stackoverflow.com/questions/103679

Pergunta

Primeiro: eu estou usando uma implementação bastante obscura de javascript incorporado como um mecanismo de script para o Adobe InDesign CS3. Esta implementação, por vezes, diferir das javascript "standard", daí o meu problema.

Eu estou usando de John Resig biblioteca jsdiff ( fonte aqui ) para comparar seleções de texto entre dois documentos. jsdiff usa objetos de baunilha como arrays associativos para mapear uma palavra do texto para outro objeto. (Veja os "ns" e variáveis ??"os" em jsdiff.js, em torno da linha 129).

As minhas dores de cabeça começar quando a palavra "refletir" surge no texto. "Refletir" é um padrão, read-only propriedade no todas objetos. Quando jsdiff tenta atribuir um valor na matriz associativa para ns [ 'refletir'], tudo explode.

A minha pergunta: existe uma maneira de contornar isso? Existe uma maneira de fazer uma tabela hash em javascript sem usar o objeto de baunilha óbvio?

As regras básicas: comutação mecanismos de script não é uma opção. :)

Foi útil?

Solução

Você pode estar "fazendo a pergunta errada" (como Raymond Chen diria); ao invés de tentar evitar o uso de objetos de baunilha, tente mudar a forma como os membros da matriz associativa são nomeados.

A maneira que eu ia tentar abordar esta: em vez de haver um ns membro de matriz [ "refletir"], mudar a maneira que jsdiff constrói as matrizes de modo que o membro é ns [ "_ refletir"] ou alguma outra variação sobre isso.

Outras dicas

Se a implementação JS você está usando suporta o método hasOwnProperty para objetos, você pode usá-lo para testar se uma propriedade tem sido explicitamente definido para um objeto ou a propriedade é herdada de seu protótipo. Exemplo:

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

objetos Bem dadas em javascript são arrays apenas associativas, não há realmente outra construída em solução para uma hash. Você pode ser capaz de criar seu próprio hashtable pseudo envolvendo uma classe em torno de algumas matrizes embora provavelmente haverá um impacto na performance significativa com o trabalho manual envolvido.

Apenas uma nota lateral eu realmente não tenho usado ou olhou para a biblioteca jsdiff por isso não posso oferecer qualquer visão válida como por dicas ou truques.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top