在 JavaScript 中,函数(Function)和方法(Method)本质都是函数,但它们的调用方式和上下文有所不同。以下是具体的联系与区别:
1、本质相同
两者都是通过 function 关键字定义的代码块,目的是封装可复用的逻辑。
// 函数定义
function sayHello() {
console.log("Hello!");
}
// 方法定义(作为对象属性)
const obj = {
sayHello: function() {
console.log("Hello from obj!");
}
es6引入对象方法简写等价于传统的sayHello:function(){},传统方法需要猫好和function关键词:
sayHello() {
console.log("Hello from obj!");
}
};
2、均为对象
无论函数还是方法,本质上都是 Function 类型的实例,可以赋值、传递和调用。
关键区别:
特征 函数(Function) 方法(Method)
归属 独立存在,不依赖对象 必须依附于对象(作为对象的属性)
调用方式 直接调用:func() 通过对象调用:obj.method()
上下文(this) 默认指向全局对象(如 window)或 undefined(严格模式) 通常指向所属对象(obj)
典型用途 通用逻辑,无特定数据关联 操作所属对象的数据或状态
3、函数调用(函数名后跟括号)
// 定义一个无参函数
function sayHello() {
console.log('Hello, World!');
}
// 执行函数
sayHello(); // 输出: Hello, World!
4、方法调用
(1)而methods这一概念在js中的表现就是,一个对象的属性是一个function:
同样的是函数,将其赋值给一个对象的成员以后,就不一样了。
将函数赋值给对象的成员后,那么这个就不在称为函数,而应该叫做方法。
var person={
name:"张三",
age:18,
//以前写法
techang:function(){
return 123
},
简写:
techang(){
return 123
}
}
console.log(person.techang())//123
(2)函数作为值赋值给变量,这是变量可以作为函数来使用,也可以执行
function add(a,b){
return a+b
}
var add2=add
var resule=add2(1,2)
console.log(resule)//3
5、构造函数(待补充)
6、导出对象与方法
(1)确保对象及其方法通过 export 正确导出(以 CommonJS 或 ES Modules 为例):
// utils.js
const obj = {
// 封装方法(支持传参)
calculate(a, b) {
return a + b;
}
};
module.exports = obj; // **CommonJS 导出**
// 或 export default obj; // **ES Modules 导出**
(2)在目标文件中导入对象后,直接通过对象调用方法并传参:
// main.js
const utils = require('./utils.js'); // CommonJS 导入
// 或 import utils from './utils.js'; // ES Modules 导入
console.log(utils.calculate(2, 3)); // 输出: 5
(3)动态传参的注意事项
this 绑定:若方法内使用 this,需确保调用时 this 指向正确(如通过 bind 绑定)17。
参数校验:建议在方法内部添加参数校验逻辑,避免未定义行为3。
链接:require/exports 或 import/export的联系和区别,各自的使用场景