2017-06-19 256 views
0

我需要典型案例的幫助,但我不知道如何做到這一點,沒有像.. in ..或forEach這樣的髒東西。 所以,我有一個方法和布爾字段顯示的對象,需要打印日誌或不。類似的東西:JS如何使用父函數的參數調用函數內部的函數?

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) 
} 
.. 

並稱這種方法,而不是重複,如果...通過:

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

但是,如果我需要登錄的未知參數控管數量在一個日誌,像什麼:

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

所以,問題是:我怎麼稱呼我的console.log函數中使用相同的參數,無論他們發了多少錢?

回答

1

使用Function#apply以及arguments對象使用傳遞給父函數的參數來調用函數。

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

您還可以使用spread operator帶參數,這使得它,這樣你就不用調用.apply

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

謝謝!有用! – Teo

1

在調用日誌函數之前,爲什麼不用x參數格式化消息,以便只有一個格式化的字符串可以記錄?

+0

沒有的事,我需要的,但不錯的主意太/ – Teo