JavaScript 中构造函数怎么调用
在 javascript 中,构造函数必须使用 new 关键字来调用。直接调用构造函数(不使用 new)会导致函数内部的 this 指向全局对象(如浏览器中的 window),从而污染全局作用域或导致属性丢失;而通过 new 调用时,引擎会自动创建一个新对象,将 this 绑定到该对象上,执行初始化代码,并返回这个新对象。

直接调用与 new 调用的区别是什么
直接调用构造函数和通过 new 调用在 this 的指向、返回值以及内存分配上有本质区别。直接调用时,this 指向全局对象,且不会自动返回新实例;而 new 调用会隐式创建对象,正确绑定 this,并返回该实例。

// 定义一个构造函数
function Person(name) {
this.name = name;
}
// 1. 直接调用构造函数
const p1 = Person('Alice');
console.log(p1); // undefined
console.log(window.name); // 'Alice' (污染了全局对象)
// 2. 使用 new 调用构造函数
const p2 = new Person('Bob');
console.log(p2); // Person { name: 'Bob' }
console.log(p2.name); // 'Bob'如果忘记写 new 关键字会发生什么
如果忘记写 new 关键字,构造函数会被当作普通函数执行。此时,函数内部对 this 属性的赋值操作会作用于当前的执行上下文(通常是全局对象 window)。为了避免这种错误,可以在构造函数内部检查 this 是否指向构造函数的原型,如果不是,则手动使用 new 重新调用自身。
立即学习“Java免费学习笔记(深入)”;
// 修复后的构造函数
function Person(name) {
if (!(this instanceof Person)) {
return new Person(name);
}
this.name = name;
}
const p3 = Person('Charlie');
console.log(p3); // Person { name: 'Charlie' }


















