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
相关产品推荐
相关产品推荐

