首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么用函数式编写的jQuery代码不能工作?

为什么用函数式编写的jQuery代码不能工作?
EN

Stack Overflow用户
提问于 2013-08-16 10:59:50
回答 1查看 59关注 0票数 0

我有一个最小的例子,它运行得很好:

代码语言:javascript
运行
复制
var node = $('div');
var fun1 = function(filter) { return node.find(filter) };
console.log(fun1('span'));

DOM:

代码语言:javascript
运行
复制
<div><span>text</span></div>

由于我只将参数传递给下一个函数,这似乎是合乎逻辑的,因此我可以去掉它,只需引用find函数:

代码语言:javascript
运行
复制
var node = $('div');
var fun2 = node.find;
console.log(fun2('span'));

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

有人能告诉我这是怎么回事吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-16 11:05:14

当将对node函数的引用分配给fun2时,您丢失了fun2的上下文。您可以通过呼叫 fun2通过它获得上下文:

代码语言:javascript
运行
复制
fun2.call(node, 'span');

或者,所以您不必每次都这样做,绑定引用find返回到node

代码语言:javascript
运行
复制
var fun2 = node.find.bind(node);

这是一个更新的例子

Update (谢谢琼恩):如果您需要支持不实现Function.prototype.bind的旧浏览器,您可以使用前面链接到的MDN文章中的详细内容,也可以使用jQuery.proxy,这做了同样的事情:

代码语言:javascript
运行
复制
var fun2 = $.proxy(node.find, node);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18271767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档