函数和方法的定义
大约 2 分钟
注
在 JavaScript 中,函数(Function)和方法(Method)都是可调用的代码块,但它们的定义和上下文有所不同:
1. 函数(Function)
定义:独立的代码块,不依赖于任何对象。
特点:
直接定义在全局作用域或模块中。
通过函数名直接调用(如 foo())。
使用 function 关键字、箭头函数或函数表达式创建。
// 1. 普通函数
function greet(name) {
return `Hello, ${name}!`;
}
greet("Alice"); // 直接调用
// 2. 箭头函数
const add = (a, b) => a + b;
add(2, 3); // 直接调用
// 3. 函数表达式
const sayHi = function() { console.log("Hi!"); };
sayHi();2. 方法(Method)
定义:绑定到对象属性上的函数,是对象的“行为”。
特点:
定义在对象或类的内部。
通过对象调用(如 obj.method())。
方法内部可以通过 this 访问所属对象的属性。
const person = {
name: "Bob",
// 对象的方法
sayName: function() {
console.log(this.name); // 通过 this 访问对象属性
}
};
person.sayName(); // 通过对象调用
// 类中的方法
class Calculator {
add(a, b) {
return a + b;
}
}
const calc = new Calculator();
calc.add(1, 2); // 通过类的实例调用关键区别
| 特性 | 函数(Function) | 方法(Method) |
|---|---|---|
| 归属 | 独立或全局作用域 | 对象或类的属性 |
| 调用方式 | 直接调用(func()) | 通过对象调用(obj.func()) |
this 指向 | 默认全局(如 window)或 undefined(严格模式) | 指向调用它的对象 |
注意事项
箭头函数没有自己的 this,因此不适合作为方法(除非刻意避免 this 绑定):
const obj = {
name: "Alice",
badMethod: () => console.log(this.name), // this 指向外层(如 window)
goodMethod: function() { console.log(this.name); } // 正确
};函数可以“变成”方法:只需将其赋值给对象属性:
函数可以“变成”方法:只需将其赋值给对象属性:总结:
函数是独立的,方法是依赖对象的。
判断标准:是否通过对象调用,以及是否依赖 this 访问对象上下文。