构造函数通过this绑定实例方法与属性,本质是在new调用时让this指向新创建的空对象并为其添加属性和方法;每个实例独享属性和方法副本,内存开销大但支持私有数据;普通调用会致this指向错误,需防护或改用原型方法共享。

构造函数通过 this 绑定实例方法与属性,本质是在函数执行时,让 this 指向新创建的空对象(即实例),然后在该对象上添加属性和方法。
构造函数内部的 this 指向新实例
当用 new 调用构造函数时,JavaScript 引擎会自动创建一个空对象,并将其作为 this 传入函数体。所有对 this.xxx = ... 的赋值,都会直接写到这个新对象上。
-
this.name = 'Alice'→ 实例拥有自己的name属性,每个实例独立存储 -
this.sayHi = function() { console.log('Hi'); }→ 方法也挂载在实例上,每个实例都有一份函数副本
实例方法与属性是“独享”的
每次 new Fn() 都会生成全新对象,this 指向各自独立的实例,因此:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 属性互不影响:修改
obj1.name不影响obj2.name - 方法不共享:每个实例的
sayHi是不同函数对象,内存开销较大 - 适合需要私有数据或闭包逻辑的场景,比如
this._id = Math.random()
注意:普通调用时 this 不指向实例
如果忘记写 new,构造函数就变成普通函数调用,this 通常指向全局对象(非严格模式)或 undefined(严格模式),导致属性被挂错地方甚至报错。
-
Person('Bob')→this.name可能污染全局(如window.name) - 建议在构造函数开头加防护:
if (!(this instanceof Person)) return new Person(...)
替代方案:原型方法更节省内存
若方法不需要访问私有变量,推荐把方法定义在 prototype 上,避免重复创建函数:
Person.prototype.sayHi = function() { console.log('Hi, ' + this.name); };- 这样所有实例共享同一个函数,
this在调用时仍正确指向调用它的实例 - 属性仍通过构造函数内的
this.xxx初始化,方法则复用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










