Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过函数对象循环&;向对象中的每个函数添加一个新方法_Javascript_Function_Loops_Object_Proxy - Fatal编程技术网

Javascript 通过函数对象循环&;向对象中的每个函数添加一个新方法

Javascript 通过函数对象循环&;向对象中的每个函数添加一个新方法,javascript,function,loops,object,proxy,Javascript,Function,Loops,Object,Proxy,我有一个对象的函数&我需要在运行时向对象中的每个函数动态添加一个名为log(它打印方法的新的方法 例如,假设这是我的函数的动态对象: let actions = { theBoringFunction() { return 'function 1' }, anotherBoringFunction() { return 'function 2' }, theMostBoringFunction() { return 'function 3'

我有一个
对象
函数
&我需要在运行时向
对象
中的每个
函数
动态添加一个名为
log
(它打印
方法
的新的
方法

例如,假设这是我的
函数的动态
对象

let actions = { 
  theBoringFunction() { 
    return 'function 1'
  },

  anotherBoringFunction() {
    return 'function 2'
  },

  theMostBoringFunction() {
    return 'function 3'
  },
}
我可以单独向方法添加一个新的
函数
,如下所示:

actions.anotherBoringFunction.log = function () {  
  return console.log(this.name)
}

actions.anotherBoringFunction.log() // logs anotherBoringFunction
它就像一个符咒,但我在
操作对象中有许多
函数
&我需要将
日志()
添加到所有函数中

我已经尝试过循环使用
对象
&添加
方法
,如下所示:

// won't work key is typeof String :(
for (let key in actions) { 
  key.log = function () { 
    return console.log(this.name)
  }
}
显然,它不起作用,因为
字符串
的一种类型,所以它不能向其中添加
方法
。我怎样才能完成我想要的?我一直在尝试,但到目前为止也没有运气

编辑编号1:

我添加了一个可复制的示例

let actions={
BoringFunction(){
返回“函数1”
},
另一个BoringFunction(){
返回“函数2”
},
mostboring函数(){
返回“函数3”
},
}
//无效键为字符串的类型:(
/*对于(让输入操作){
key.log=函数(){
返回console.log(this.name)
}
} */
actions.anotherBoringFunction.log=函数(){
返回console.log(this.name)
}

actions.anotherBoringFunction.log()//记录anotherBoringFunction
actions[key]。log=
key
是属性名(一个字符串)
,在
循环中,通过键-你想为
中的.@RobinZigmond
对于
中的
的值使用(让对象的fn.values(actions))fn.log=/*…*/,这确实会起作用。我不确定我是否完全理解您的意图。您可能会创建一些行为类似的讨厌对象,但通常情况下如果是您的意图,那么更改为arrow函数可能会适得其反。如果您的意思是执行赋值,那么
Object.values(actions).forEach(v=>v.log=/*…*/)
,但我更喜欢上面提到的
,因为…of
,这取决于你的意图-你目前正在做的是为每个属性创建一个新的
log
函数,而函数本身使用
this
来记录相关的名称。因此,你可以对所有属性使用相同的
log
函数em(只有一个函数),但我不知道这段代码的意图和用例是什么。
for (let key in actions) { 
  actions[key].log = function () { 
    return console.log(this.name)
  }
}