Na sociedade, ao avaliar a capacidade e o valor de uma pessoa, muitas vezes existem dois critérios diferentes: um é "baseado em relacionamentos" e o outro é "baseado na habilidade". Ambos os padrões estão incorporados em diferentes culturas, indústrias e valores pessoais, cada um com seus próprios apoiadores e detratores.
Dentro das linguagens de programação, existem dois tipos de padrões que organizam o código de maneiras diferentes, vinculando estruturas de dados a funções. Este artigo discutirá brevemente a aplicação e o princípio de ação desses dois padrões comuns.
Na linguagem Javascript, é fornecida a palavra-chave class, que podemos usar para definir classes. É importante ressaltar que as classes são extensíveis e, quando os métodos são chamados em uma instância, elas procuram as definições dos métodos na ordem da cadeia de protótipos. Por exemplo:
class Animal { move() { return 'move' } } class Monkey extends Animal { jump() { return 'jump' } } class Human extends Monkey { write() { return 'write' } }As palavras-chave
extends podem nos ajudar a definir uma nova classe que se estende de outras classes. Podemos obter a cadeia de protótipos assim:
let me = new Human() let proto = me.__proto__ let r = [] while (proto !== null) { r.push(proto.constructor.name) proto = proto.__proto__ }
Teremos r assim: ['Human', 'Monkey', 'Animal', 'Object']. Quando chamamos um método, o sucesso da chamada do método depende da existência de uma definição correspondente na cadeia de protótipos. Por exemplo, se você chamar me.move(), ele terá uma definição na classe Animal e a chamada será bem-sucedida.
Este é o modelo de classe, que gosto de chamar de modelo "relacional", que pode ser chamado desde que esteja definido na classe da própria instância, ou na classe pai, classe avó, e assim sobre.
Comparado ao modelo baseado em relacionamento, o modelo baseado em competências é muito mais simples. Contanto que uma instância satisfaça uma determinada característica, o método correspondente pode atuar na instância independentemente do relacionamento da instância.
let me = { moveable: true, freezable: false } function move(x) { return x.moveable ? 'move' : undefined } function freeze(x) { return x.freezable ? 'freeze' : undefined }
Neste modelo, dados e métodos são independentes uns dos outros. A vantagem é que é conciso e direto, mas a desvantagem é óbvia, devido à independência do método e dos dados, é difícil substituir a definição do método.
Depois de apresentar as duas formas de conectar estruturas de dados e métodos, podemos pensar que quando for necessário implementar métodos com diferentes funções de mesmo nome de acordo com a classe dos dados, é recomendável utilizar o modelo de classe relacional . Quando o método geralmente é relativamente fixo e os dados são mutáveis, e o mesmo método funciona em dados diferentes, o modelo baseado em competências pode ser usado.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3