Definindo e Estendendo ClassesDefinindo e Estendendo Classes
Problema Você deseja uma estratégia eficaz para definir e estender as classes. Teoria da função é um objeto, e como as receitas anteriores ilustrar, é possível associar propriedades e métodos com uma função. Então, porque é necessário criar as classes, desde as funções podem ser morphed em classes? A resposta diz respeito ao problema de descobrir o exemplo da função. Encerramentos Usando JavaScript você pode definir uma função dentro de uma função, como mostrado no código a seguir. Fonte: / website / ROOT / ajaxrecipes / javascript / functionsareobjects.html função GetFunctionFixed () (var inst = function (cmpval) (assertEquals (cmpval, inst.value);) return inst;) Ao usar uma variável local, a exemplo da função pode ser referenciada no âmbito da execução da função. Isto funciona porque as funções são objetos, e, portanto, objeto de referência que está acontecendo. Solução usando o princípio de que funções são objetos, é possível criar uma classe sem usar a nova palavra-chave, como ilustra o exemplo a seguir, que se baseia na função dentro de função técnica. Fonte: / website / ROOT / ajaxrecipes / javascript / definingextendingclasses.html função CreateClassInstance () (var inst = function () (inst.instantiated = 10; inst.method = function () (inst.instantiated = 20;)) inst (); return inst;) No exemplo da classe, uma classe "é criado porque chamar a função irá atribuir as propriedades da função. Assim, a função se comporta como uma classe "." Inst variável é referenciada em toda a "classe", tornando-se referência à possível as propriedades e métodos da classe "." Com efeito, a "classe" está agindo como uma verdadeira aula, como evidenciado pelo seguinte código de teste. Fonte: / website / ROOT / ajaxrecipes / javascript / function_are_classes definingextendingclasses.html: function () (var CLS1 = CreateClassInstance (); info ( "function_are_classes", CLS1); cls1.value = 10;assertEquals (10, cls1.instantiated); cls1.method (); assertEquals (20, cls1.instantiated); var cls2 = CreateClassInstance (); assertEquals ( "indefinido", typeof cls2.value ());), Os experimentos de teste de código com várias facetas de demonstrar que o objeto "instanciado" está se comportando como um objeto. O negrito mostra o código que os "objetos" CLS1 e cls2 na verdade são dois casos distintos. Desde que parece tão fácil criar uma classe "e um" objeto ", porque há uma nova palavra-chave? A resposta é porque descobrir como referência cruzada a instância da função com o método é complicada após a classe "foi instanciado, como ilustra o seguinte código-fonte. Fonte: / website / ROOT / ajaxrecipes / javascript / function_classes_generates_error definingextendingclasses.html: function () (var = CreateClassInstance cls (); cls.method2 = function () ( inst.instantiated = 40; )try ( cls.method2 ();testManager.failed ();) catch (e) (info (functions_classes_generates_error "," exceção "Esperado (" + ➥ e.toString () + ")");)), No teste adicional, a "classe" é criado e atribuído à variável CLS. As referências cls variável de um "objeto" que é estendido com o método method2. Na execução do method2, o objeto "instância" é referenciada usando a variável inst. Inst variável foi escolhido porque foi definido quando o "objeto" foi instanciado. Executando o código irá gerar uma exceção porque inst não está definido. Para fazer o trabalho por exemplo, a função referenciado por method2 teria de cls referência. Em poucas palavras, fazendo referência à instância do "objeto" dentro de uma função é mais complicado do que deveria ser. A solução é a nova palavra-chave, já que associa o identificador isso com a instância do objeto de dentro de uma função. Reescrevendo o código CreateClassInstance para usar a nova palavra-chave, chegamos a função CreateRealClassInstance, mostrado no código a seguir. Fonte: / website / ROOT / ajaxrecipes / javascript / definingextendingclasses.html função CreateRealClassInstance () (var inst = function () (this.instantiated = 10; this.method = function () (this.instantiated = 20;)) inst return new ();) Comparando CreateClassInstance e CreateRealClassInstance, a única diferença real é que a nova palavra-chave é usada ao chamar a variável inst como uma função, inst e passa a ter com este. Usando a nova palavra-chave na frente de uma função converte a função em uma instância do objeto personalizado, onde a instância do objeto pode ser referenciado usando o identificador esta dentro da função. A instância do objeto retornado pode ser prorrogado ea instância referenciada usando a palavra-chave desta , como mostra o seguinte teste. Fonte: / website / ROOT / ajaxrecipes / javascript / function_instantiates_real_class definingextendingclasses.html: function () (var = CreateRealClassInstance cls (); cls.method2 = function () (this.instantiated = 40;) assertEquals (10, cls.instantiated); cls . method2 (); assertEquals (40, cls.instantiated);) Chamando a função CreateRealClassInstance, a instância do objeto retornado é atribuído à variável CLS. O objeto é ampliado para incluir o método method2, e na implementação de method2 a instância do objeto é referenciado usando a variável presente. Desta vez, quando method2 é chamado, não há exceção ea propriedade instanciado tem um valor de 40. Se você estiver familiarizado com JavaScript e já instanciado alguns objetos, então a sintaxe instanciação anterior provavelmente parece um pouco estranho. A forma clássica de instanciar um objeto em JavaScript é a seguinte: MyObject function () (var) cls = MyObject novo (); Esta abordagem envolve a definição de uma função onde a função é um construtor para o objeto de MyObject tipo. Quando os programadores MyObject é instanciado, a notação é muito semelhante ao instanciar um tipo em Java e C #, e, portanto, que instanciar tipos em JavaScript nunca questionar o que realmente acontece. Uma explicação mais precisa de como um objeto em JavaScript é definida quando a variável inst foi utilizada para instanciar um objeto. Especificamente, um objeto é construído através da conversão de uma função em um objeto e, a função associada com a nova palavra-chave é o construtor. Quando manipular classes JavaScript, manter os seguintes pontos em mente: • É possível criar tipos de JavaScript sem usar a nova palavra-chave. No entanto, a criação de JavaScript primas "objetos" tem a desvantagem de ter de referência cruzada "objeto" instância com a função. • Objetos JavaScript são os tipos que você pode atribuir de forma dinâmica, tornando possível a implementação do protótipo baseado em programação, onde o comportamento do tipo é determinado em tempo de execução. • receitas neste artigo mostrou como manipular objetos de função, uma técnica que também se aplica aos tipos de objeto JavaScript. • A base de todos os objetos JavaScript é o tipo Object. • Ao usar a palavra-chave new para instanciar um tipo, a propriedade prototype associado com o objeto função pode ser usada para definir o comportamento que se aplica a todas as instâncias de um tipo particular. um artigo submetido por Sonja Lande Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre. Importante: Este artigo "Definindo e as classes de extensão" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.
|
|||||
| Online: 389 users browsing the articles directory |
|
|