我很难找到一些信息,而且几乎可以肯定,因为我不知道我正在做什么的正确术语。当我在回调函数中搜索有关变量的信息时,代码与我在此处尝试的代码不同。
我有一些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
});
然而,当我这样做时,它无法正常工作。
我将如何实现这一目标?
答案 0 :(得分:2)
您可以通过更改功能范围或使用闭包来实现此目的。
第一
notifyClick: functionNameHere.bind('variableContentWouldbeHere');
你的上下文" functionNameHere"实施是你的论点。
function functionNameHere() {
console.log(this === 'variableContentWouldbeHere'); //true
}
第二
使用闭包
notifyClick: function() { functionNameHere('variableContentWouldbeHere'); }
答案 1 :(得分:1)
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: function(){
functionNameHere('variableContentWouldbeHere');
},
timeout: 10
});
答案 2 :(得分:1)
我不完全确定你要做什么,但我想你可能需要这样的东西:
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
});
答案 3 :(得分:0)
您无法影响调用回调的方式,Notify类中的代码会确定这一点。如果您尝试像第二个示例中那样传递它,则函数" functionNameHere"将立即调用它的结果并将其结果作为回调函数传递给Notify构造函数 - 这不是你想要的。
你可以做的是让你的functionNameHere函数成为一个包装器,返回另一个将用作回调的函数。
答案 4 :(得分:0)
你可以传递一个匿名函数来调用你的函数:
var myNotification = new Notify('Notification Title', {
body: 'message goes here',
icon: "/icon.png",
tag: 'for app use',
notifyClick: () => functionNameHere('variableContentWouldbeHere'),
timeout: 10
});