0

我有这个最小的例子,它工作正常:

var node = $('div');
var fun1 = function(filter) { return node.find(filter) };
console.log(fun1('span'));

DOM:

<div><span>text</span></div>

这似乎是合乎逻辑的,因为我只是将参数传递给下一个函数,我可以摆脱它并简单地引用该find函数:

var node = $('div');
var fun2 = node.find;
console.log(fun2('span'));

但它抛出Uncaught TypeError: Object [object global] has no method 'pushStack'

有人可以告诉我这有什么问题吗?

现场演示:http: //jsfiddle.net/wyVhW/

4

1 回答 1

3

您已经失去了将函数node引用分配给的上下文。您可以通过调用它来取回该上下文:findfun2 fun2

fun2.call(node, 'span');

或者,因此您不必每次都这样做,将引用绑定findnode

var fun2 = node.find.bind(node);

这是一个更新的示例

更新(感谢Jon):如果您需要支持未实现的旧浏览器,Function.prototype.bind您可以使用之前链接到的 MDN 文章中详述的 polyfill,或者使用jQuery.proxy,它做同样的事情:

var fun2 = $.proxy(node.find, node);
于 2013-08-16T11:05:14.610 回答