Qual é a diferença entre objetos criados por literais e objetos criados por new? O que é implementado dentro de new? Como escrever um new manualmente?

Literal:

  •  Criar objetos usando literais é mais simples e fácil de ler.
  •   Não há necessidade de resolução de escopo, mais rápido

dentro do novo:

  • Crie um novo objeto
  • Faça o novo objeto __proto__apontar para a função originalprototype
  • Mude o ponto disso (apontando para o novo obj) e execute a função, e salve o resultado da execução como resultado
  • Determine se o resultado da execução da função é nulo ou indefinido. Em caso afirmativo, retorne o novo objeto anterior. Caso contrário, retorne o resultado.

Manuscrito novo:

       

    // 手写一个new
    function myNew(fn, ...args) {
      // 创建一个空对象
      let obj = {}
      // 使空对象的隐式原型指向原函数的显式原型
      obj.__proto__ = fn.prototype
      // this指向obj
      let result = fn.apply(obj, args)
      // 返回
      return result instanceof Object ? result : obj
    }

Supongo que te gusta

Origin blog.csdn.net/m0_63873004/article/details/123609867
Recomendado
Clasificación