constructor 中的 this 指向新创建的实例,必须加 this 才能将属性绑定到实例上;不加 this 则仅为局部变量,实例无法访问。

需要加 this。
constructor 中的 this 指向新创建的实例
在类的 constructor 中,this 明确指向即将被构造出来的那个实例对象。所有通过 this.xxx = xxx 赋值的属性,都会成为该实例自身的属性(即“实例属性”),而不是挂载在原型上或变成局部变量。
- 不加
this:相当于声明了一个局部变量,只在constructor函数执行期间存在,构造结束后就销毁,实例无法访问。 - 加
this:属性被绑定到实例上,后续可通过实例名.属性名访问,其他实例方法也能通过this.属性名正确读取。
不加 this 会怎样?
看这个例子:
class Person {
constructor(name, age) {
name = 'Tom'; // ❌ 局部变量,对实例无影响
this.age = age; // ✅ 实例属性,可被访问
}
}
const p = new Person('Jerry', 25);
console.log(p.name); // undefined
console.log(p.age); // 25第一行 name = 'Tom' 没有 this,只是改了形参 name 的值,和实例完全无关;而 this.age 才真正把 age 存到了实例上。
为什么不能省略?——作用域和绑定逻辑决定的
constructor 是一个普通函数,它内部没有自动把参数或变量映射到实例的机制。JavaScript 不会猜测你想把哪个变量存为实例属性,必须显式用 this 告诉引擎:“把这个值挂到当前实例上”。这和 Java、C# 等语言中隐式使用 this 或字段自动提升不同,JS 要求你主动声明。
- 类体顶层写的
getAge() { ... }是方法,自动添加到Person.prototype上; - 但属性必须在
constructor中用this初始化,否则实例就没有该属性。
补充:this 在 constructor 中不会出错的前提
只有通过 new 调用类时,constructor 中的 this 才指向新实例。如果误用 Person()(不带 new),this 会指向全局对象(如 window),导致意外污染全局空间。所以务必用 new 实例化。











