推送函数并获取回调
Push functions and get callback
我有一个基本的小部件,我可以将函数调用推送到(几乎像Google analytics,ga.js)
这是小部件代码:
var widget = function () {
function _private_setName(a, callback) {
console.log(a[0]);
callback(a[0]);
}
return{
setName:_private_setName
};
}();
if (window._test) {
for (var i = 0; i < _test.length; i++) {
var method = _test[i].shift();
try {
widget[method].apply(widget, _test);
}
catch(err) { }
}
}
window._test = {
push: function() {
try {
var args = Array.prototype.slice.call(arguments, 0);
var method = args[0].shift();
widget[method].apply(widget, args);
}
catch(err) { }
}
};
所以我目前能做的是:
var _test = _test || [];
_test.push(['setName', 'Todd']);
然而,我希望能够从函数setName获得回调。
我试过:
_test.push('setName', 'Todd', function(num) {
console.log("callback called! " + num);
});
但我无法让它发挥作用,有什么想法可以实现吗?
您应该更改
var method = args[0].shift();
至
var method = args.shift();
之后将调用回调。这是一个工作版本的jsfiddlehttp://jsfiddle.net/krasimir/pLuad/1/
这是一些非常棒的janky代码,你可以在那里实现你想要做的事情。回调的一个常见做法是在你传递回调的函数中使用arguments.length-1],所以它总是"最后"个参数,将用作回调函数。然后你说
if(typeof arguments[arguments.length - 1] === 'function'){
arguments[arguments.length - 1](dataToPassToCallback);
}
在你的情况下,你似乎添加了很多不必要的抽象,并使这变得比实际需要的困难得多。例如,你声明了一个"小部件"对象/类,然后你将其自身的静态实例分配给它(widget[fnName]=widget.apply())-所以现在当你声明更多的小部件时,它们都包含对其他小部件方法的引用。
我想你真正想要的是Widget类成为它自己的东西,并且有一个WidgetManager类或Widgets类,然后它将做与你的_test数组类似的事情。
相关文章:
- 从新的WordPress媒体上传程序获取JS回调
- 如何在没有回调的情况下获取有关元素的信息
- 使用reactjs setState回调获取上一个输入值的计算值
- javascript/获取滚动条位置的回调
- Angular 2中Observable中获取数据后的队列/回调函数
- Yii ajaxbutton : 如何在成功回调函数中获取 $(this)
- 从异步回调中获取值
- DimpleJS-在getTooltipText回调中获取原始数据
- 使用回调获取图像像素数据
- 如何获取 jQuery 回调触发返回值
- 从 Spotify 应用程序中的回调获取专辑数据
- less.js - 在解析器的回调中获取变量值
- jQueryUI FullCalendar:从服务器获取事件后的回调
- 从回调函数获取xhr状态
- 无法获取函数的ajax回调
- 从回调中获取更详细的错误信息
- NodeJS异步模块:如何在回调中获取results对象
- 无法在pubnub javascript回调中获取错误
- 获取完整页面上加载的幻灯片.js slideload回调
- 如何获取 Ember 组件对象内部承诺成功或错误回调