为什么这个jQuery代码是用函数式编写的;不起作用
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文章中详细介绍的polyfill,也可以使用jQuery.proxy
,它做同样的事情:
var fun2 = $.proxy(node.find, node);
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- Ember Data DS.Model's set函数不起作用
- Javascript:If-then语句在函数中不起作用
- JavaScript链接在点击时不起作用;函数在页面加载时工作
- AngularJS指令部分应用的函数don'不起作用
- 为什么我的JavaScript堆栈排序函数不起作用
- 嵌套到另一个函数中的Fancybox函数;不起作用
- Javascript onchange()函数不起作用
- I'我试图在文本区域中进行特定的输入,调用特定的javascript函数,但没有成功;不起作用
- javascript函数调用不起作用
- 另一个Ajax函数触发的Ajax函数不起作用
- 从PHP调用JS函数不起作用
- 清除函数中if语句内部不起作用的间隔
- js函数堆栈传入变量,.hide()不起作用
- jQuery validate函数不起作用
- jQuery克隆函数在chrome中不起作用
- JS-窗口宽度函数不起作用
- 函数调用不起作用
- .hasClass 在 onclick 函数中不起作用,但删除和添加类函数可以
- javascript函数,该函数不起作用,但不会显示任何错误