构造函数是一种特殊的函数,用于创建和初始化对象(也就是创建一个对象的函数),既然是创建对象的函数了,函数是有this指向的,因为是直接调用 所以指向全局对象,而且在复用构造函数时它创建的对象就和第一次使用时创建的对象是一样的了,那么平常的直接使用就有问题了。
function Person(name, age) {
this.name = name;
this.age = age;
}
const person = Person('Alice', 25);
const person2 = Person('Alice2', 25);
console.log(person.name);//报错
console.log(person2.name);//报错
//这段代码定义了一个构造函数`Person`,它接受两个参数`name`和`age`,并将它们分别赋值给对象的属性
//`name`和`age`。然后直接调用了构造函数。这意味着`this`关键字指向全局对象,而不是新的对象实例。
//因此,变量`person`和`person2`都是`undefined`。最后,我们尝试访问`person.name`和
//`person2.name`,但由于这些变量未定义,所以会抛出一个错误。
因此要使用 new
关键字调用构造函数,这样 会创建一个新的空对象,并将该对象作为 this
上下文传递给构造函数,也就可以使用 this
来设置新创建的对象实例的属性和方法。使用 new
关键字是为了创建一个新的对象实例,以便在之后使用该对象实例。
function Person(name, age) {
this.name = name;//此处的this是指向new出来的实例
this.age = age;
}
const person1 = new Person('Alice', 25);
const person2 = new Person('Bob', 30);
console.log(person1.name); // 输出:Alice
console.log(person1.age); // 输出:25
console.log(person2.name); // 输出:Bob
console.log(person2.age); // 输出:30