![](/img/trans.png)
[英]Why my JQuery code doesn't want to work while code is properly written
[英]Why is this jQuery code written in functional style doesn't work?
我有这个最小的示例,它工作正常:
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/
当您将对find
函数的引用分配给fun2
时,您已经失去了node
的上下文。 您可以通过调用 fun2
来获得该上下文:
fun2.call(node, 'span');
或者,因此您不必每次都这样做,请绑定引用以find
回node
:
var fun2 = node.find.bind(node);
这是一个更新的示例 。
更新(感谢Jon ):如果您需要支持未实现Function.prototype.bind
旧浏览器,则可以使用前面链接的MDN文章中详细介绍的jQuery.proxy
,也可以使用jQuery.proxy
来完成相同的工作:
var fun2 = $.proxy(node.find, node);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.