O caso em que o método é escrito no construtor é referido como o método dentro da função e o caso em que o método é escrito no atributo protótipo é referido como o método no protótipo.
• Métodos dentro da função: Usando métodos dentro da função, podemos acessar variáveis privadas dentro da função. Se o objeto que usamos o novo construtor para exigir que operemos variáveis privadas dentro do construtor, devemos considerar o uso de métodos dentro da função no momento.
• Métodos no protótipo: quando precisamos criar um grande número de objetos por meio de uma função, e esses objetos têm muitos métodos; No momento, precisamos considerar adicionar esses métodos ao protótipo da função. Nesse caso, nosso código consumirá memória relativamente pequena.
• Em aplicações reais, esses dois métodos são frequentemente usados em combinação; Portanto, precisamos primeiro entender o que precisamos e depois escolher como usá -lo.
// Afunção do construtor a (nome) {this.name = nome || 'um'; this.sayhello = function () {console.log ('Olá, meu nome é:' + this.name); }} // construtor bfunction b (nome) {this.name = nome || 'b';} b.prototype.sayhello = function () {console.log ('Olá, meu nome é:' + this.name);}; var a1 = new A ('a1'); var a2 = novo a ('a2'); a1.syhello (); a2.); B ('B2'); B1.Sayhello (); B2.Sayhello ();Eu escrevi dois construtores, o primeiro é A, que contém um método dizhello; O segundo é o construtor B, que escreve que o método diz que a propriedade no protótipo do construtor B. Escrever o método dentro do construtor aumenta o custo de inicializar um objeto através do construtor e escrever o método na propriedade do protótipo reduz efetivamente esse custo. Você pode pensar que os métodos de chamada no objeto são muito mais rápidos do que chamar métodos em sua cadeia de protótipo, o que não é o caso. Se você não possui muitos protótipos no objeto, a velocidade deles é realmente semelhante.
Além disso, algumas coisas a serem observadas:
• Antes de tudo, se você definir um método na propriedade Prototype da função, lembre -se de que, se você alterar um método, o método de todos os objetos gerados por este construtor será alterado.
• Outro ponto é a questão da melhoria da variável. Podemos dar uma olhada no seguinte código:
func1 (); // Um erro será relatado aqui porque o FUNC1 não recebeu um valor quando a função for executada. Erro: func1 não é um functionVar func1 = function () {console.log ('func1');}; func2 (); // Isso será executado corretamente porque a declaração da função será promovida.FUNCH FUNC2 () {Console.log ('Func2');}• Em relação à questão da serialização do objeto. Os atributos definidos no protótipo de uma função não serão serializados. Você pode ver o seguinte código:
função a (nome) {this.name = name;} a.prototype.saywhat = 'diga o que ...'; var a = novo a ('dreamapple'); console.log (json.stringify (a));Podemos ver que a saída é {"Name": "Dreamapple"}
O artigo acima discute brevemente o método e o protótipo dos construtores JS é todo o conteúdo que compartilhei com você. Espero que possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.