Pagina inicial » Codificação » JavaScript orientado a objeto (OOJS) 3 maneiras de criar instâncias de objeto

    JavaScript orientado a objeto (OOJS) 3 maneiras de criar instâncias de objeto

    Quando uma linguagem de programação é tudo sobre objetos, a primeira coisa que precisamos aprender é como criar objetos. Criar objetos em JavaScript é bastante fácil: um par de chaves vai fazer o trabalho, no entanto, isso é nem o único caminho para criar um objeto nem o único caminho você precisará usar.

    Em JavaScript, as instâncias de objeto são criado a partir de objetos internos e vem à existência quando o programa está sendo executado. Por exemplo, Encontro é um objeto interno que nos fornece informações sobre datas. Se quisermos mostrar a data atual em uma página, nós precisa de uma instância de tempo de execução de Encontro que carrega as informações sobre a data atual.

    JavaScript também nos permite definir nossos próprios objetos que podem produzir suas próprias instâncias de objetos em tempo de execução. Em JavaScript, tudo é um objeto e todo objeto tem um antepassado final chamado Objeto. A criação de uma instância de objeto é chamada instanciação.

    1. O Novo operador

    Um dos métodos mais comuns e conhecidos para criar uma nova instância de objeto é usando o Novo operador.

    Você precisa de um construtor para tornar o Novo trabalho do operador. Um construtor é um método de um objeto que reúne um nova instância desse objeto. Sua sintaxe básica é assim:

     novo construtor () 

    Um construtor pode aceitar argumentos que pode ser usado para alterar ou adicionar propriedades à instância do objeto que ele constrói. O construtor tem o mesmo nome como o objeto a que pertence.

    Aqui está um exemplo de como criar um instância do Encontro() objeto com o Novo palavra chave:

     dt = new Data (2017, 0, 1) console.log (dt) // Dom Jan 01 2017 00:00:00 GMT + 0100 

    Encontro() é o construtor para criar um novo Encontro objeto. Construtores diferentes para um objeto pegar argumentos diferentes para criar o mesmo tipo de instâncias de objeto com atributos variados.

    Nem todos os objetos internos em JavaScript podem ser instanciados como Encontro. Existem objetos que não vem com um construtor: Matemática, JSON e Refletir, mas eles ainda são objetos comuns.

    Entre os objetos internos que possuem construtor (es), Símbolo não pode ser chamado no estilo do construtor para instanciar um novo Símbolo instância. Só pode ser chamado como uma função que retorna um novo Símbolo valor.

    Além disso, entre os objetos internos que possuem o (s) construtor (es), nem todos precisam que seus construtores sejam chamados com o (s) construtor (es). Novo operador, a fim de ser instanciado. Função, Matriz, Erro, e RegExp também pode ser chamado como funções, sem usar o Novo palavra-chave, e eles irão instanciar e retornar uma nova instância de objeto.

    2. O Refletir objeto

    Os programadores de back-end podem já estar familiarizados com APIs de reflexão. Reflexão é uma característica das linguagens de programação inspecionar e atualizar algumas das entidades básicas, como objetos e classes, em tempo de execução.

    Em JavaScript, você já pode executar alguns operações de reflexão usando Objeto. Mas um API de reflexão adequada eventualmente veio a existir em JavaScript também.

    o Refletir objeto tem um conjunto de métodos para criar e atualizar instâncias de objetos. o Refletir objeto não tem um construtor, por isso não pode ser instanciado com o Novo operador, e, assim como Matemática e JSON, isto não pode ser chamado como uma função ou.

    Contudo, Refletir tem um equivalente do Novo operador: a Reflect.construct () método.

     Reflect.construct (target, argumentsList [, newTarget]) 

    Tanto o alvo e o opcional newTarget argumentos são objetos tendo seus próprios construtores, enquanto argumentsList é um lista de argumentos para ser passado para o construtor de alvo.

     var dt = Reflect.construct (Data, [2017, 0, 1]); console.log (dt); // dom Jan 01 2017 00:00:00 GMT + 0100 

    O código acima tem o mesmo efeito como instanciando Encontro() usando o Novo operador. Embora você ainda possa usar Novo, Reflexão é uma Padrão ECMAScript 6. Também permite que você fazer uso do newTarget argumento, que é outra vantagem sobre o Novo operador.

    O valor de newTarget's protótipo (para ser exato, é o protótipo de newTargetconstrutor) torna-se o protótipo da instância recém-criada.

    Um protótipo é o propriedade de um objeto, cujo valor é também um objeto, carregando as propriedades do objeto original. Em suma, um objeto recebe seus membros do seu protótipo.

    Aqui, vamos ver um exemplo:

     classe A construtor () this.message = função () console.log ('mensagem de A') classe B constructor ()  mensagem () console.log ('mensagem de B')  data () console.log ('dados de B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // message from A console.log (obj.data ()); // dados do B console.log (obj instanceof B) // true 

    Passando B como o terceiro argumento para Reflect.construct (), o valor protótipo do obj objeto é feito para ser o mesmo como o protótipo de Bconstrutor (que tem as propriedades mensagem e dados).

    portanto, obj pode acessar o mensagem e dados, disponível em seu protótipo. Mas desde obj é feito usando UMA, também tem o seu próprio mensagem isto Recebido de UMA.

    Apesar de obj é construído como uma matriz, é não é um exemplo de Matriz, porque o seu protótipo está configurado para Objeto.

     obj = Reflect.construct (Matriz, [1,2,3], Objeto) console.log (obj) // Matriz [1, 2, 3] console.log (obj instanceof Array) // false 

    Reflect.construct () pode ser útil quando você deseja criar um objeto usando mais de um modelo.

    3. O Object.create () método

    Você também pode criar um novo objeto comum com um protótipo específico através da Object.create (). Isso também pode parecer muito semelhante ao uso do Novo operador, mas não é.

     Object.create (O [, propertiesObject]) 

    o O argumento é um objeto que serve o protótipo para o novo objeto que será criado. O opcional propertiesObject argumento é um lista de propriedades você pode querer adicionar ao novo objeto.

     classe A construtor ()  mensagem () console.log ('mensagem de A') var obj = Object.create (novo A (), dados: gravável: verdadeiro, configurável: verdadeiro, valor: function () retornar 'dados de obj') console.log (obj.message ()) // mensagem de A console.log (obj.data ()) // dados de obj obj1 = Object.create ( novo A (), foo: gravável: verdadeiro, configurável: verdadeiro, valor: função () retorno 'foo de obj1') console.log (obj1.message ()) // mensagem de Um console. log (obj1.foo ()) // foo de obj1 

    No obj objeto, a propriedade adicionada é dados, enquanto em obj1, Está foo. Então, como você vê, nós podemos ter propriedades e métodos adicionados a um novo objeto.

    Isso é ótimo quando você quer criar vários objetos do mesmo tipo mas com diferentes propriedades ou métodos suplementares. o Object.create () sintaxe salva o problema de codificar todos eles separadamente.