24 lines
1.3 KiB
Plaintext
24 lines
1.3 KiB
Plaintext
---
|
|
title: 'Diferença entre: `function Person(){}`, `var person = Person()`, e `var person = new Person()`?'
|
|
---
|
|
|
|
Esta pergunta é muito vaga. Nossa melhor suposição sobre a intenção dessa pergunta é que ela está perguntando sobre construtores em JavaScript. Tecnicamente falando, `function Person(){}` é apenas uma declaração de função normal. A convenção é usar PascalCase para funções que se destinam a ser usadas como construtores.
|
|
|
|
`var person = Person()` invoca o `Person` como uma função, e não como um construtor. Invocar como tal é um erro comum se a função pretende ser usada como um construtor. Normalmente, o construtor não devolve nada. Assim, invocando o construtor como uma função normal retornará `undefined` e que será atribuído à variável pretendida como a instância.
|
|
|
|
`var person = new Person()` cria uma instância do objeto `Person` usando o operador `new`, que herda de `Person.prototype`. Uma alternativa seria usar `Object.create`, tais como: `Object.create(Person.prototype)`.
|
|
|
|
```js
|
|
function Person(name) {
|
|
this.name = name;
|
|
}
|
|
|
|
var person = Person('John');
|
|
console.log(person); // undefined
|
|
console.log(person.name); // Uncaught TypeError: Cannot read property 'name' of undefined
|
|
|
|
var person = new Person('John');
|
|
console.log(person); // Person { name: "John" }
|
|
console.log(person.name); // "john"
|
|
```
|