javascript - 如何将上下文传递给匿名函数?

标签 javascript callback

有一些功能,那就是做一些长期的工作,并提供回调。

someFunc: function(argument, callback, context) {
  // do something long

  // call callback function
  callback(context);
}

在应用程序中,我使用此功能
someFunc('bla-bla', function (context) {
  // do something with this scope
  context.anotherFunc();
}, this);

不通过context如何实现回调函数范围?

需要一些这样的:
someFunc('bla-bla', function () {
  // do something with this scope
  this.anotherFunc();
}, this);

最佳答案

接受的答案似乎有些过时了。假设您使用的是相对现代的浏览器,您可以使用 Function.prototype.bindvanilla javascript .或者,如果您使用 underscorejQuery , 你可以使用 _.bind$.proxy分别(如有必要,将回退到 call/apply)。

以下是这三个选项的简单演示:

// simple function that takes another function
// as its parameter and then executes it.
function execute_param(func) {
    func();
}

// dummy object. providing an alternative context.
obj = {};
obj.data = 10;

// no context provided
// outputs 'Window'
execute_param(function(){
    console.log(this);
});

// context provided by js - Function.prototype.bind
// src: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
// outputs 'Object { data=10 }''
execute_param(function(){
    console.log(this);
}.bind(obj));

// context provided by underscore - _.bind
// src: http://underscorejs.org/#bind
// outputs 'Object { data=10 }'
execute_param(_.bind(function(){
    console.log(this);
},obj));

// context provided by jQuery - $.proxy
// src: http://api.jquery.com/jQuery.proxy/
// outputs 'Object { data=10 }'
execute_param($.proxy(function(){
    console.log(this);
},obj));

您可以在此处的 jsfiddle 中找到代码:http://jsfiddle.net/yMm6t/1/ (注意:确保开发者控制台是打开的,否则你将看不到任何输出)

关于javascript - 如何将上下文传递给匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13281288/

相关文章:

lua - 如何从c函数回调lua函数

C++:路由到成员函数的静态函数包装器?

php - 将额外参数传递给 usort 回调

node.js - 如何使用回调等待两个查询异步 Node

Javascript 对象 Jquery 回调

javascript - 确定选择是否存在

javascript - 如何使用 css 控制此 js 脚本中的嵌入文本

javascript - Aptana Eclipse 插件和 Dojo 自动完成

javascript - 如何在backbone.js中继承并添加child中的事件

javascript - 如何处理 react 中的异步功能?