Ste*_*ven 1 javascript eval callback anonymous-function
我有一个自动完成功能,回调数据返回.许多不同的实例都使用此自动完成功能.
$.fn.acItem = function(callback){
var self = this;
$(self).autocomplete({
(...)
select: function(e, ui){
// Eval for calling anonymous function (right?)
window[callback](ui.item);
}
});
};
Run Code Online (Sandbox Code Playgroud)
我也在使用命名空间
var Agency = {
init: function() {
var self = this;
self.registerAgency.addItem();
},
registerAgency: {
(...)
addItem: function(item){
if(!item){
(...)
// Initiate autocomplete on input
$('.search-item').acItem('Agency.registerAgency.addItem');
} else {
// Do something with Item
}
}
}
Agency.init();
Run Code Online (Sandbox Code Playgroud)
window[callback](ui.item)如果我没有使用命名空间,请使用作品.但是对于命名空间,它会变得有点复杂,如Jason Bunting所描述的那样.
由于使用了不同的命名空间acItem(),因此需要知道在回调中调用哪个函数.但许多人强烈反对使用Eval来调用匿名函数.
那么对匿名函数进行回调的好方法是什么?
window['foo']()是不是 "EVAL".它与window.foo()使用不同的语法相同,您可能也不会将其称为"eval".这个问题是你希望你的回调函数是一个特别命名的全局函数.但是您不必按名称传递函数; 函数是Javascript中的第一类对象,可以直接作为值传递.实际上你应该简单地接受一个函数作为回调:
$.fn.acItem = function(callback) {
callback();
};
Run Code Online (Sandbox Code Playgroud)
此函数接受回调作为函数并调用它.很直接.你会像这样传递回调:
$('.search-item').acItem(function () { .. });
// or:
$('.search-item').acItem(this.registerAgency.addItem);
// or, to preserve the `this` context inside the callback:
$('.search-item').acItem(this.registerAgency.addItem.bind(this.registerAgency));
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |