front-end-interview-handbook/packages/quiz/questions/difference-between-function.../zh-CN.mdx

24 lines
1.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "比较差异: `function Person(){}`, `var person = Person()`, 和 `var person = new Person()`?"
---
这个问题相当含糊。 我们对其意图的最好猜测是它在询问JavaScript中的构造函数。 从技术上讲,`function Person(){}` 只是一个正常函数声明。 惯例是对打算作为构造函数使用的函数使用PascalCase。
`var persons = Person()` 将`Person` 作为函数,而不是作为构造函数。 如果要将函数用作构造函数,这样的动作是常见的错误。 构造函数通常不会返回任何东西。 因此,调用构造函数像一个正常函数会返回 `undefined` ,它会被分配给指定为实例的变量。
`var persone = new Person()` 创建一个 `Person` 对象的实例,使用`new` 操作符继承了 `Person.prototype`。 另一种办法是使用“Object.create”例如“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"
```