我
下列语句有什么区别:`function Person(){}`、`var person = Person()`和`var person = new Person()`?
难度:
这个问题问得很含糊。我猜这是在考察 JavaScript 中的构造函数(constructor)。从技术上讲,function Person(){}
只是一个普通的函数声明。使用 PascalCase 方式命名函数作为构造函数,是一个惯例。
var person = Person()
将Person
以普通函数调用,而不是构造函数。如果该函数是用作构造函数的,那么这种调用方式是一种常见错误。通常情况下,构造函数不会返回任何东西,因此,像普通函数一样调用构造函数,只会返回undefined
赋给用作实例的变量。
var person = new Person()
使用new
操作符,创建Person
对象的实例,该实例继承自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"