jquery是否有dojo.hitch()的等价物?
请原谅我的无知,因为我对jquery不太熟悉。是否有一个等价物?它返回一个保证在给定范围内执行的函数 --编辑-- 根据要求,这里有一个例子。我经常使用hitch来确保回调在正确的对象中执行。例如,假设我有一个名为jquery是否有dojo.hitch()的等价物?,jquery,Jquery,请原谅我的无知,因为我对jquery不太熟悉。是否有一个等价物?它返回一个保证在给定范围内执行的函数 --编辑-- 根据要求,这里有一个例子。我经常使用hitch来确保回调在正确的对象中执行。例如,假设我有一个名为doSomethingAsync的实用程序方法,我给它传递了一个回调函数。使用hitch,我可以确保函数在特定范围内执行,即使实用程序方法执行ajax调用等等: expectedScopeObj = { flag: true, callback: function(){c
doSomethingAsync
的实用程序方法,我给它传递了一个回调函数。使用hitch,我可以确保函数在特定范围内执行,即使实用程序方法执行ajax调用等等:
expectedScopeObj = {
flag: true,
callback: function(){console.debug(this.flag);},
main: function() {
// without hitch the callback function would not find flag
core.util.doSomethingAsync(dojo.hitch(this, this.callback));
}
}
毫无疑问,回调函数可能会在不同的作用域中执行,并在
this.flag
未定义时抛出错误。但是,对于hitch,它保证在execptedScopeObj
否中执行。至少在1.3.2中没有,因为我不知道1.4。然而,有一些:
bobince提到的
函数.bind
是一个非常有用的工具。您可以使用它简单地重写挂接功能:
// The .bind method from Prototype.js
if (!Function.prototype.bind) { // check if native implementation available
Function.prototype.bind = function(){
var fn = this, args = Array.prototype.slice.call(arguments),
object = args.shift();
return function(){
return fn.apply(object,
args.concat(Array.prototype.slice.call(arguments)));
};
};
}
jQuery.hitch = function(scope, fn) {
if (typeof fn == "string") fn = scope[fn];
if (fn && fn.bind) return fn.bind(scope);
};
至少从您链接的文档页面来看,这是我看到该功能工作的方式…[ADMIN EDIT:注意下面更流行的答案- 我会选择
function.bind
,这将是未来JavaScript版本中执行此操作的标准方法。除了修复此
,它还允许您将参数传递给目标函数
在所有浏览器都支持它之前,您可以这样做。我知道这已经得到了回答,但并不正确。我相信这就是您要寻找的 更新
很多很多年以后,在大量的JavaScript工作之后,在我不再使用jQuery,因为浏览器兼容性已经不再是一个问题之后,我建议使用over,as。虽然这仍然是原始问题的正确答案,但我觉得有义务指导人们使用普通的解决方案,而不是依赖jQuery在我看来,
hitch
在Dojo中更复杂
e、 g
function f(a,b,c){return a+b*c}
var newF = hitch(null,f,1,undefined,3);
newF(2) /*1+2*3*/
您到底想实现什么?如果示例不是dojo.hitch(this,this,callback),那么示例代码将非常有用?这个jQuery插件是从Dojo改编而来的。虽然bind与Dojo相似,而且肯定非常有用,但它并不能完全完成任务。它通过适当设置
这个来完成回调函数的任务。你还希望挂接
做什么?你上面的示例代码根本不起作用。你是对的。我理解错了tood还以为你指的是jquery的bind函数。谢谢你,如果可能的话,我们尽量避免使用插件,因为我们更喜欢使用基础库支持。现在看来,我们最好的选择是使用dojo基础和jquery组合构建,这样我们就可以两全其美:)这是亡灵巫师的领地,但对任何人来说都是如此其他还没有解决这个问题的人,你可以看看@phiggins的挂接插件:更像僵尸,我刚刚在上面重新发布了这个链接
//why not just:
(function($){
$.hitch = function(scope, fn){
return function(){
return fn.apply(scope, arguments);
}
}
})(JQuery);
//This works exactly like Dojo's hitch from what I can tell.
function f(a,b,c){return a+b*c}
var newF = hitch(null,f,1,undefined,3);
newF(2) /*1+2*3*/
/**
* This is for simulate dojo.hitch.
* @param $
*/
(function($) {
$.hitch = function(context, func) {
var args = Array.prototype.slice.call(arguments,
2/*Remove context, and func*/);
return function() {
return func.apply(context,
Array.prototype.concat.call(args, arguments));
};
};
})(jQuery);