1. 方法所属的对象被称为调用对象(Calling Object)
- 意思:当你调用一个方法时,方法当前所属的对象就叫调用对象。
- 示例:
const robot = { model: '1X', greet() { // ← 这个方法属于 robot 对象 console.log(this.model); // this 就是调用对象 } }; robot.greet(); // 调用对象是 robot
2. this 关键字
- 作用:指代调用对象,让你在方法内部访问对象的属性。
- 关键:
this的值取决于调用位置,而不是定义位置。 - 示例:
const cat = { name: '小花', speak() { console.log(`我是${this.name}`); // this 指向 cat } }; cat.speak(); // 输出:我是小花
3. 方法不会自动获得调用对象其他内部属性的访问权限
- 意思:方法内部如果想用对象的其他属性,必须通过
this,不能直接写属性名。 - 错误示例(常见新手坑):
const obj = { x: 10, double() { return x * 2; // ❌ 这里 x 是 undefined! } }; - 正确写法:必须写
this.x
4. this 的值取决于访问 this 的位置
- 普通函数 / 方法 →
this指向调用它的对象 - 箭头函数 →
this继承外层作用域(词法作用域)
5. 不能用箭头函数作为方法(如果需要访问内部属性)
- 箭头函数没有自己的
this,会往外层找。 - 错误示例:
const robot = { model: '1X', greet: () => { // ❌ 箭头函数 console.log(this.model); // this 是 undefined 或 window } }; - 正确:用普通函数
greet() {}
6. JavaScript 对象没有内置隐私机制
- 对象属性默认都是公开的,谁都能改。
- 但开发者有约定俗成的规则来“暗示”隐私。
7. 属性名前加下划线 _ 表示不希望被直接修改
- 这是业界最常见的隐私约定(不是真正的 private)。
- 示例:
const bankAccount = { _balance: 1000, // 别人不应该直接改这个 getBalance() { return this._balance; } };
8. Setter 和 Getter 方法
- 提供更安全、可控的属性访问方式。
- 示例:
const person = { _age: 25, get age() { // getter return this._age; }, set age(newAge) { // setter(可加校验) if (newAge > 0) this._age = newAge; } }; person.age = 30; // 自动调用 setter console.log(person.age); // 自动调用 getter
9. 工厂函数(Factory Function)
- 用来批量快速创建多个相似对象。
- 示例:
function createRobot(model, energy) { return { model, energy, greet() { console.log(`我是${this.model}`); } }; } const r1 = createRobot('1X', 100); const r2 = createRobot('2Y', 200);
10. 对象解构(Object Destructuring)
- 两种常用方式:
- 属性值简写(Property Value Shorthand):
const name = '小明'; const age = 18; const student = { name, age }; // 自动变成 {name: '小明', age: 18} - 解构赋值:
const { model, energy } = robot; // 一次性取出多个属性 const { model: robotModel } = robot; // 重命名
- 属性值简写(Property Value Shorthand):
快速记忆口诀(方便背):
- 方法里想用属性 → 必须
this - 箭头函数不能当方法 → 因为
this失效 - 隐私 → 用
_下划线约定 - 安全访问 → getter / setter
- 批量造对象 → 工厂函数
- 快速取值 → 对象解构