构造函数中this指向新创建的实例,属性通过this赋值成为实例独有成员;方法应定义在原型上以复用,箭头函数不可替代构造函数,ES6 class是语法糖但this行为一致。

在 JavaScript 中,构造函数内部通过 this 为实例属性赋值,本质是把属性挂载到新创建的对象(即当前实例)上。只要在构造函数中用 this.属性名 = 值 的形式,该属性就会成为新实例独有的成员。
构造函数中 this 指向的是新实例
当使用 new 调用构造函数时,JS 引擎会自动创建一个空对象,并将 this 绑定到它上面。此时对 this 的任何属性赋值,都直接写入这个新对象:
-
this.name = 'Alice'→ 实例上就有了name属性 -
this.sayHi = function() { ... }→ 方法也属于该实例(非共享) - 注意:未用 this 赋值的变量(如
let age = 25)只是局部变量,不会出现在实例上
和原型方法配合使用更合理
频繁给每个实例重复添加相同逻辑的方法(比如 this.print = function(){...})会浪费内存。推荐把方法定义在原型上,只用 this 初始化数据属性:
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
- 数据类属性(如
id、title)用 this 在构造函数里赋值 - 行为类方法(如
render()、validate())放在Constructor.prototype上 - 这样既保证实例数据独立,又实现方法复用
箭头函数不能替代构造函数中的 this
构造函数本身必须是普通函数;如果在内部用了箭头函数来“模拟”构造逻辑,this 不会指向实例,而是继承外层作用域的 this,导致赋值失败:
- ❌ 错误:
const create = () => { this.name = 'Bob'; return this; };—— 这里的 this 不是实例 - ✅ 正确:用
function Person(name) { this.name = name; }或 ES6 类语法
ES6 class 本质一样,只是语法糖
class 写法中,constructor 方法里的 this 行为与传统构造函数完全一致:
constructor(name) { this.name = name; this.id = Date.now(); }- 仍需靠
new MyClass()触发,this 才指向新实例 - 类体中定义的方法默认添加到原型,不占用每个实例的内存










