函数表达式可赋值给对象属性成为方法,调用方式为对象.属性名()或对象['属性名']();this指向调用它的对象,但单独提取调用会丢失;es6方法简写更常用,箭头函数慎用于需this的场景。

函数表达式可以赋值给对象的属性,从而成为该对象的方法,调用方式和其他对象方法完全一致——通过 对象.属性名() 或 对象['属性名']() 执行。
基本写法:把函数表达式赋给对象属性
函数表达式本身是值,可以像字符串、数字一样赋给对象的某个属性:
const obj = {
greet: function() {
return "Hello!";
}
};
console.log(obj.greet()); // "Hello!"
也可以先定义函数表达式,再挂到对象上:
const sayHi = function(name) {
return `Hi, ${name}!`;
};
const user = {
name: "Alice",
speak: sayHi
};
console.log(user.speak("Bob")); // "Hi, Bob!"
注意 this 指向:方法内 this 指向调用它的对象
当函数作为对象属性被调用时(obj.method()),函数内部的 this 默认指向该对象:
const person = {
name: "Tom",
getName: function() {
return this.name; // this → person
}
};
console.log(person.getName()); // "Tom"
⚠️但若把该方法单独提取出来再调用,this 会丢失(在非严格模式下指向全局,在严格模式下为 undefined):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const fn = person.getName; console.log(fn()); // undefined(严格模式)或可能报错
解决办法包括:使用箭头函数(不适用,因无独立 this)、bind、call/apply,或改用类方法/ES6 箭头属性(需配合 class)。
简写语法:ES6 中的“方法简写”更常用
虽然你问的是函数表达式,但实际开发中更推荐用 ES6 的方法简写(本质仍是函数表达式,只是语法糖):
const car = {
brand: "Tesla",
start() { // ← 等价于 start: function() { ... }
return `${this.brand} started.`;
},
honk: () => "Beep!" // ← 这是箭头函数,this 不绑定 car!慎用
};
console.log(car.start()); // "Tesla started."
✅ 推荐用普通方法简写;❌ 避免在对象字面量中对需要访问 this 的方法使用箭头函数。
动态添加方法:运行时赋值函数表达式
对象创建后,也能随时把函数表达式赋给新属性:
- 直接赋值:
obj.calc = function(a, b) { return a + b; }; - 使用方括号动态设名:
obj["get" + "Time"] = function() { return new Date(); }; - 调用:
obj.calc(2, 3);或obj["getTime"]();
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










