构造函数中this指向新创建的实例对象;new调用时引擎依次创建空对象、设置原型、以该对象为this执行函数体、默认返回该对象。

在构造函数中,this 指向新创建的实例对象,这是 JavaScript 引擎在调用 new 时自动完成的绑定,不需要手动干预。
new 调用时 this 的绑定过程
当你用 new Foo() 实例化时,JavaScript 引擎会按顺序执行四步:
- 创建一个空的普通对象(即新实例)
- 将该对象的
[[Prototype]]指向Foo.prototype - 以该对象为
this,执行Foo函数体(此时函数内所有this.xxx都操作这个新对象) - 若函数没有显式返回对象,则默认返回这个新对象
构造函数内部 this 的表现
在函数体中,this 就是那个刚被创建、正被初始化的对象。你可以直接给它添加属性或方法:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
function Person(name) {
this.name = name; // 绑定到新实例
this.sayHi = function() {
return 'Hi, I am ' + this.name; // this 仍指向该实例
};
}
const p1 = new Person('Alice');
console.log(p1.name); // 'Alice'
console.log(p1.sayHi()); // 'Hi, I am Alice'
注意 this 不会被外部调用方式影响
即使你把构造函数的方法单独拿出来调用,this 也不再指向原实例——因为 this 绑定发生在函数**执行时**,取决于**如何调用**,而非定义位置:
-
p1.sayHi()→this是p1 -
const fn = p1.sayHi; fn()→this在非严格模式下是window(或undefined,严格模式) - 所以构造函数内定义方法不是最佳实践;更推荐把方法挂到
prototype上,复用且避免重复创建函数
箭头函数在构造函数里不改变 this 绑定
箭头函数没有自己的 this,它会沿作用域链向上找外层普通函数的 this。如果写在构造函数体内,它的 this 就是构造函数的 this(即新实例):
function Timer() {
this.seconds = 0;
// 箭头函数捕获外层 this(即当前实例)
this.tick = () => {
this.seconds++; // 安全,this 指向实例
};
}
但要注意:这种写法会让每个实例都拥有独立的箭头函数,无法共享;若只需访问实例属性且不介意内存开销,可以接受。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










