2016-10-20 12 views
1

私はいくつかの情報を見つけるのに苦労しています。私がやっていることについて正しい用語が分からないので、ほぼ確実です。私がコールバック関数の変数に関する情報を検索するとき、コードは私がここでやろうとしているものと同じではありません。JavaScriptコールバックで変数を渡す

私はいくつかのJavaScriptコードを持って、これはその一部です:

var myNotification = new Notify('Notification Title', { 
    body: 'message goes here', 
    icon: "/icon.png", 
    tag: 'for app use', 
    notifyClick: functionNameHere, 
    timeout: 10 
}); 

「functionNameHere」の部分は、このスクリプトによって作成された通知がクリックされたときに呼び出される他の関数の名前です。

は、私はそれと一緒に変数を渡すことができるようにする必要がありますので、基本的に私は何をする必要があるかです:

var myNotification = new Notify('Notification Title', { 
    body: 'message goes here', 
    icon: "/icon.png", 
    tag: 'for app use', 
    notifyClick: functionNameHere('variableContentWouldbeHere'), 
    timeout: 10 
}); 

しかし、私はそれを行う際に、それが正常に動作しないことのように。

これをどのように達成できますか?

+3

'notifyClick:functionNameHere.bind(someContext、yourVar)' – Maxx

+0

研究「カリー化」 - クラスを通知しない限り、基本的には、基本的には、だから、マックスさんのコメント –

答えて

2

関数のスコープを変更したり、クロージャを使用したりすることで、これを実現できます。

第一:

notifyClick: functionNameHere.bind('variableContentWouldbeHere'); 

そして、あなたのコンテキスト "functionNameHere" 実装の内部には、あなたの引数です。

function functionNameHere() { 
    console.log(this === 'variableContentWouldbeHere'); //true 
} 

第二:私は全くわからない

var myNotification = new Notify('Notification Title', { 
    body: 'message goes here', 
    icon: "/icon.png", 
    tag: 'for app use', 
    notifyClick:() => functionNameHere('variableContentWouldbeHere'), 
    timeout: 10 
}); 
+0

私よりも良い答えです。 –

+0

2番目のメソッドであるclosureを使い終わりました。あなたがこのソリューションで最初に答えたので、私はあなたの答えを受け入れています。 –

0

コールバックの呼び出し方法に影響を与えることはできません。Notifyクラスのコードは、コールバックの呼び出し方法に影響しません。 2番目の例のように渡すと、関数 "functionNameHere"がすぐに呼び出され、その結果がコールバック関数としてNotifyコンストラクタに渡されます。これはあなたが望むものではありません。

functionNameHere関数をコールバックとして使用される別の関数を返すラッパーにすることができます。

+0

のいくつかの変種を使用して変数を渡すことができますが、動作しませんか? –

+0

'bind'を使うだけで、コンテキストと引数を関数にバインドすることができます – Maxx

0

を使用しますが、このようなあなたの関数を呼び出す匿名関数を渡すことができます何をしようとしているのですか? uessは、あなたがこのようなものが必要になることがあります。

var myVariable = {}; 
var myNotification = new Notify('Notification Title', { 
    body: 'message goes here', 
    icon: "/icon.png", 
    tag: 'for app use', 
    notifyClick: function(e){ 
     functionNameHere(myVariable); 
    }, 
    timeout: 10 
}); 
1
var myNotification = new Notify('Notification Title', { 
    body: 'message goes here', 
    icon: "/icon.png", 
    tag: 'for app use', 
    notifyClick: function(){ 
    functionNameHere('variableContentWouldbeHere');  
    }, 
    timeout: 10 
}); 
+0

閉鎖を使用するあなたのソリューションは私がやったことです。しかし、他の誰かがあなたの前に同じ解決策で答えたので、私は彼らの答えを受け入れました。私はあなたにアップフォートを与えました。あなたの助けをありがとう:) –

+1

あまりにもありがとうございました:) –

1

閉鎖に

notifyClick: function() { functionNameHere('variableContentWouldbeHere'); } 
+0

あなたの解決策を使用して私がやったことです。しかし、他の誰かがあなたの前に同じ解決策で答えたので、私は彼らの答えを受け入れました。私はあなたにアップフォートを与えました。あなたの助けをありがとう:) –

+1

ありがとう@SherwinFlight – Sohel

関連する問題