Pergunta

Gosto de Steve Yegge Prototype Pattern exemplo decidiu preparar uma prova rápida de exemplo conceito.

No entanto, eu realmente não pensar sobre as coisas. Embora seja grande para especificar dinamicamente o comportamento de objetos e é uma solução fácil de Steve do opinativo elf exemplo, eu ainda estou tentando descobrir a melhor maneira de variáveis ??de instância alça.

Por exemplo, digamos que eu tenha um objeto AwesomeDragon. Então eu quero fazer um objeto AwesomeDragonImmuneToFire assim que eu faço um novo filho do AwesomeDragon (AwesomeDragonImmuneToFire herda propriedades do AwesomeDragon) e 'put' "ImmuneToFire" como uma propriedade com um valor de 'verdadeiro'. Por enquanto, tudo bem. Agora vamos dizer que eu quero enviar meu objeto AwesomeDragon em uma excursão de aldeias camponesas próximas. Isto irá envolver a atualização a propriedade 'posição' de AwesomeDragon. No entanto, no momento em que fizer isso AwesomeDragonImmuneToFire vai decolar assim.

É a melhor solução para valores de instância de substituição mediante a criação do objeto, por exemplo imediatamente 'colocar' o valor 'posição' on AwesomeDragonImmuneToFire à corrente 'obter' valor 'posição'?

Foi útil?

Solução

Não que dependem como você realmente implementar a herança no seu sistema?

Por exemplo, em uma versão JavaScript do que você descreve, a prototype para AwesomeDragonImmuneToFire normalmente seria um exemplo de um AwesomeDragon, e uma vez que você sempre trabalhar com instâncias, não seria importa o que você faz para qualquer AwesomeDragon especial:

function Dragon()
{
    this.position = "starting point";
}

function AwesomeDragon()
{
    this.awesome = true;
}
AwesomeDragon.prototype = new Dragon();

function AwesomeDragonImmuneToFire()
{
    this.immuneToFire = true;
}
AwesomeDragonImmuneToFire.prototype = new AwesomeDragon();

>>> var awesome = new AwesomeDragon();
>>> var immune = new AwesomeDragonImmuneToFire();
>>> awesome.position = "flying above village";
>>> immune.position;
"starting point"
>>> immune.awesome
true

Neste exemplo, não há classes e todas as instâncias são apenas instâncias de Object que acontecem de saber qual a função foi usado para construí-los. new é apenas um pouco de açúcar sintática e usando STUDLY CAPS para funções construtoras é apenas uma convenção para funções que se destinam a ser usados ??com new.

O importante é que cada objeto tem uma cadeia de objetos de protótipo, que é examinado, se você tentar acessar um atributo que o objeto em si não se sustenta, conforme descrição do Yegge do que o "Propriedades Padrão" é.

https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Details_of_the_Object_Model

Outras dicas

Isto irá envolver a atualização a propriedade 'posição' de AwesomeDragon. No entanto, no momento em que fizer isso AwesomeDragonImmuneToFire vai decolar assim.

Talvez eu entenda mal, mas eu não tenho certeza por que você acha que o AwesomeDragonImmuneToFire vai decolar assim. Se eles são dois objetos distintos e posição é uma propriedade dos objetos, em seguida, cada instância (dragão) terá sua própria posição. Alterando a posição de um dragão não deve afetar a posição do outro.

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