A nova palavra-chave

Chamar uma função com new cria um novo objeto usando a função chamada como o "construtor" para esse objeto:

function MyFunction() {} const myObject = new MyFunction();  typeof myObject; > "object"` 

Isso permite que uma "função de construtor" fornecer um modelo para a criação de objetos que seguem o mesmo padrão estrutural:

function MyFunction() {   this.myProperty = true; } const myObject = new MyFunction();  myObject.myProperty; > true 

O valor de this em um construtor refere-se ao objeto que está sendo criado, permitindo que o objeto seja preenchido com propriedades e métodos no momento da criação. Isso permite que criação de objetos que contêm valores de dados e quaisquer métodos necessários para agir os dados como uma única unidade portátil, um conceito chamado "encapsulamento":

function MyFunction( myArgument ) {     this.myValue = myArgument;     this.doubleMyValue = () => myArgument * 2; } const myObject = new MyFunction( 10 );  myObject.myValue; > 10  myObject.doubleMyValue(); > 20 

this refere-se à execução atual. contexto de uma função, o que significa que uma função construtora segue a mesma regras para o valor de this como qualquer outra função. Por exemplo, uma função pretendido como um construtor usa a vinculação global para o valor de this quando invocado de maneira independente:

function MyFunction() {     console.log( this  ); } const myObject = new MyFunction(); > MyFunction { }  MyFunction(); // Global `this` binding outside of strict mode is `globalThis` > Window {  }  (function() {     "use strict";     function MyFunction() {             console.log( this );     }     MyFunction();  // Global `this` binding inside of strict mode is `undefined` }()); > undefined 

É convencional colocar em maiúscula o primeiro caractere do nome de uma função de construtor de e-mail, seguindo o padrão de nomenclatura estabelecido pela API do JavaScript de fábrica. Embora às vezes você veja os termos usados como sinônimos, funções de construtor, funções destinadas a atuar em um objeto recém-construído objeto quando invocado com a palavra-chave new. Os valores são diferentes funções", o que explicitamente return um quando invocado normalmente:

function myFunction( myArgument = false ) {   return { "myProperty" : myArgument }; } const myObject = myFunction( true );  myObject; > Object { myProperty: true } 

Embora os princípios básicos sejam os mesmos, os casos de uso de funções de construtor personalizadas são melhor atendidos pela sintaxe de Classe mais completa introduzida no ES6.