JS如何使用父函数的参数调用函数内的函数?

时间:2017-06-19 14:37:52

标签: javascript scope arguments call bind

我需要有关典型案例的帮助,但我不知道如何做到这一点,而不是像.. in ..或forEach这样的脏东西。 所以,我有一个对象有一些方法和bool字段显示,需要打印日志或不。这样的事情:

var sender = {
  showLogs: true,
  doSomething: function(){
    "do something";
    if (this.showLogs)
      console.log("Sender do something")
  }
}

显然,会有很多相同的代码,重复每个方法:

if(this.showLogs)
  console.log("Sender do x");

最佳做法是将此代码移至新方法中:

..
log: function(message){
  if (this.showLogs)
    console.log(message)
}
..

并调用此方法而不是重复if ... passage:

  ..
  doSomething: function(){
    "do something";
    this.log("Sender do something");
  }
 ..

但是如果我需要在一个日志中记录未知数量的参数,例如:

this.log("Start at: ", start time,", Value send: ", data);

所以,问题是:我如何使用相同的参数调用我的函数中的console.log,无论它们被发送了多少?

2 个答案:

答案 0 :(得分:1)

为什么在调用日志函数之前不用x参数格式化消息,以便只记录一个格式化的字符串?

答案 1 :(得分:1)

使用Function#applyarguments对象来调用带有传递给父函数的参数的函数。

log: function(message){
  if (this.showLogs)
    console.log.apply(null,arguments);
}

您还可以使用带有参数的spread operator,这样您就不必致电.apply

log: function(message){
  if (this.showLogs)
    console.log(...arguments);
}