2017-12-19 4 views
1

を印刷している私は、オプションのメッセージ入力して、方法、「ビープ音」を追加しました:矢印機能は「車」という名前の関数で

this.beep = function (message) { } 

を、私はこれをログに記録するために、テンプレートリテラルを使用したいです関数の内部:

console.log(this.name + ': ' + 'Beeeeep!' + (message ? ' ' + message : '')) 

私は次のことを書きましたが、出力は私にリテラルそのものの内容を示しています

console.log(`${this.name}: Beeeeep! ${ (message) => { 
    if (message) return `${message}`; 
    return ' '; 
    }}`); 
(this.name = 'てmyCar' の)

出力:

myCar: Beeeeep! (message) => { 
    if (message) return `${message}`; 
    return ''; 
    } 

なぜそれがリテラルの代わりに、transpileの内容をログに記録しますか?


*私は同様に動作します簡単な方法でそれを記述する方法を考え出し:

console.log(`${this.name}: Beeeeep! ${message || ''}`) 

しかし、私はまだ最初のコードで間違っていたかを理解したいと思います。

答えて

6

これは、関数の本体と定義をテンプレートリテラルの文字列に渡しているために発生します。関数の結果を文字列に表示したい場合は、その関数の本体を含む文字列として渡されない限り、同時に関数を使用して呼び出す必要があります。これを実現するには、IIFEを使用できます。

1

あなたの実装では関数が定義されているだけなので、テンプレートリテラルはその関数自体を出力するからだと思います。

機能の出力を印刷したいので、矢印機能を呼び出す必要があります。私は三項演算子を使用するように関数を変更しました。また、IIFEを使用して関数を呼び出すことで、出力が必要に応じて出力されます。

console.log(`${this.name}: Beeeeep! ${((message) => message ? message : ' ')('Test')}`);

関連する問題