You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:如何在对象中存储带参函数调用(避免eval)

解决对象中定义带参数延迟执行函数的简洁方法

你的问题核心是:直接赋值my_function("this")会立即执行函数,把返回值存在my_object.c里,而你需要c是一个可调用的函数,只有在调用my_object.c()时才执行带参数的my_function。以下是几种比普通匿名函数更简洁的实现方式:

1. 箭头函数(最常用的简洁写法)

箭头函数语法比普通function()更紧凑,完美适配这种场景:

function my_function(val) { console.log("The value is " + val) }
const my_object = {
  "a": "nothing",
  "b": 0,
  "c": () => my_function("this")
}
my_object.c(); // 调用时才执行my_function,输出"The value is this"

2. 使用bind()预设参数

如果想直接复用原函数,可通过bind()预先绑定参数,同时指定函数的this上下文(这里不需要this,传null/undefined即可):

function my_function(val) { console.log("The value is " + val) }
const my_object = {
  "a": "nothing",
  "b": 0,
  "c": my_function.bind(null, "this")
}
my_object.c(); // 同样输出"The value is this"

注意:bind()会返回一个新函数,调用这个新函数时,预设的参数会作为第一个参数传入原函数,后续如果给c()传额外参数,会排在预设参数之后。

为什么原写法不行?

你最初的代码"c": my_function("this")中,my_function("this")是立即执行表达式,脚本加载到这一行时就会调用函数,把返回值(这里是undefined,因为my_function没有返回值)赋值给my_object.c,所以后续调用my_object.c()会报错(因为undefined不是函数)。

内容的提问来源于stack exchange,提问作者MirceaKitsune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:28:12