当我运行以下代码时:
var divs = $('div');
// The first three methods of showing a div work
divs.eq(0).show();
(divs.eq(1).show)();
var f = function() {
divs.eq(2).show();
}
f();
// But this doesn't. Why?
var g = divs.eq(3).show;
g();
最后一种方法没有显示div,并且控制台中没有错误。我想使用它,因为我想简洁地存储函数而不创建匿名功能块。这就是我通常在Python中所做的事情。我无法理解这里出了什么问题。
编辑:评论并没有真正帮助我理解这个问题。this
是如何迷路的?它改变了什么,为什么?为什么(divs.eq(1).show)();
没有发生这种情况?
答案 0 :(得分:3)
正如评论中已经说明的那样,它不起作用,因为show()
取决于this
的值。
this
的值取决于函数如何调用:
foo()
)时,this
将引用全局对象或undefined
(在严格模式下)。 obj.foo()
)调用时,this
引用对象(obj
)。了解this
在JS中的工作原理至关重要。参见:
答案 1 :(得分:0)
当您致电g()
时,this
的值未设为divs.eq(3)
。这是修复它的一种方法。
divs.eq(0).show();
(divs.eq(1).show)();
var f = function() {
divs.eq(2).show();
}
f();
var div3 = divs.eq(3);
var g = div3.show;
g.call(div3);
答案 2 :(得分:0)
divs.eq(3).show
是此功能代码(由console.log(g)
检查):
(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}
this
是人们所指的。
函数g
需要应用于某些东西。那个东西,在第一种情况下是a jQuery element
(div)。但在第二种情况下,它是#document
元素。