JavaScript构造函数通过this为每个实例独立设置属性,这些属性不共享于原型;需用new调用,首字母大写命名,避免混淆原型属性或误声明变量。

在 JavaScript 中,构造函数通过 this 关键字为新创建的实例设置初始属性,这些属性会绑定到每个对象实例上,而非共享在原型中。
定义构造函数并用 this 初始化实例属性
构造函数本质上是普通函数,但需配合 new 操作符调用。函数内部使用 this.属性名 = 值 的方式,把数据直接挂载到即将生成的实例对象上。
- 每次调用
new Constructor()都会创建一个全新对象,this指向它 - 所有通过
this赋值的属性,都是该实例独有的(非共用) - 推荐首字母大写命名构造函数,以示区分(如
Person、Car)
基本写法示例
以下是一个典型的构造函数初始化过程:
function Person(name, age) {
this.name = name; // 实例属性:每个实例独立拥有
this.age = age; // 实例属性:值随传入参数变化
this.isAlive = true; // 实例属性:固定初始值
}
const alice = new Person('Alice', 28);
const bob = new Person('Bob', 35);
console.log(alice.name); // 'Alice'
console.log(bob.name); // 'Bob'
console.log(alice.isAlive === bob.isAlive); // true(值相同,但内存地址不同)
注意避免常见错误
初始化实例属性时,容易混淆实例属性与原型属性,或误用闭包模拟私有变量。
立即学习“Java免费学习笔记(深入)”;
- 不要在构造函数里用
var/let/const声明同名变量代替this,否则属性不会挂到实例上 - 避免在构造函数中直接给
this赋值引用类型(如数组、对象),除非明确需要每个实例独有一份副本 - 若需默认值且参数可能为
undefined,可用逻辑运算符或空值合并操作符处理:this.name = name ?? 'Anonymous'
ES6 类语法中的等价写法
类的 constructor 方法本质也是构造函数,this 的行为一致:
class Animal {
constructor(species, sound) {
this.species = species; // 实例属性
this.sound = sound;
this.id = Math.random().toString(36).substr(2, 9); // 每个实例唯一
}
}
const dog = new Animal('Dog', 'Woof');
console.log(dog.species); // 'Dog'


















