Javascript jQuery返回窗口对象
这是一个非常愚蠢的问题,但就我个人而言,我无法理解: 为什么Javascript jQuery返回窗口对象,javascript,jquery,Javascript,Jquery,这是一个非常愚蠢的问题,但就我个人而言,我无法理解: 为什么$(按钮)。addClass('focus')返回DOMNodes 但是 (button.addClass | |$(button.addClass)('focus')返回窗口对象 编辑:这是否链接到JavaScript间接调用,例如:(1,警报)('test')?jQuery函数可以链接。这是通过放置并返回此位于其函数末尾 但是,如果执行(button.addClass | |$(button.addClass)(“focus”),则
$(按钮)。addClass('focus')
返回DOMNodes
但是
(button.addClass | |$(button.addClass)('focus')
返回窗口
对象
编辑:这是否链接到JavaScript间接调用,例如:
(1,警报)('test')
?jQuery函数可以链接。这是通过放置并返回此代码>位于其函数末尾
但是,如果执行(button.addClass | |$(button.addClass)(“focus”)
,则会取消对函数的引用,其上下文将丢失window
是默认上下文(除非您处于严格模式,在这种情况下,我认为它是null
(但作为非严格模式用户,我不确定))这就是返回窗口的原因
此外,链接此函数的任何尝试都将失败。jQuery函数可以链接。这是通过放置并返回此代码>位于其函数末尾
但是,如果执行(button.addClass | |$(button.addClass)(“focus”)
,则会取消对函数的引用,其上下文将丢失window
是默认上下文(除非您处于严格模式,在这种情况下,我认为它是null
(但作为非严格模式用户,我不确定))这就是返回窗口的原因
此外,任何链接此功能的尝试都将失败。您实际上要做的是:
var fn;
if (button.addClass)
fn = button.addClass;
else
fn = $(button).addClass;
fn('focus');
因此,您将丢失对button或$(button)的引用。您实际上是这样做的:
var fn;
if (button.addClass)
fn = button.addClass;
else
fn = $(button).addClass;
fn('focus');
因此,您将丢失对button或$(button)的引用。button是什么,您想做什么?看起来你把事情复杂化了。Button可以是一个DOMNode,也可以是一个jQuery包装的DOMNode。你最好把它做成一个或另一个,并把它放在一个函数中,在这个函数中,你可以传递Button
(作为jQuery对象)或者$(Button)
,如果它是DOM元素,那么这个函数总是处理同一类型。但无论如何,这不是你的问题,是吧:我知道如何解决问题。问题更多的是,为什么这两种情况返回它们的值?按钮是什么,您想做什么?看起来你把事情复杂化了。Button可以是一个DOMNode,也可以是一个jQuery包装的DOMNode。你最好把它做成一个或另一个,并把它放在一个函数中,在这个函数中,你可以传递Button
(作为jQuery对象)或者$(Button)
,如果它是DOM元素,那么这个函数总是处理同一类型。但无论如何,这不是你的问题,是吧:我知道如何解决问题。问题在于,为什么这两种情况返回它们的值?我知道链接,但是为什么逻辑OR
和()括号
会取消上下文引用?调用方不应该定义引用吗?比如:a.b()
和b.b()
?我。。。对不起,我不能回答这个问题。我只知道会发生这样的事情,而不是为什么。@m_vdbeek:如果你写foo.bar()
或foo[“bar”]()
,那么bar
将被调用this
等于foo
。在任何其他情况下(特定例外除外)此
将等于全局对象(窗口
)。@Jon感谢您的回答!我知道链接,但是为什么逻辑OR
和()括号
会取消上下文引用?调用方不应该定义引用吗?比如:a.b()
和b.b()
?我。。。对不起,我不能回答这个问题。我只知道会发生这样的事情,而不是为什么。@m_vdbeek:如果你写foo.bar()
或foo[“bar”]()
,那么bar
将被调用this
等于foo
。在任何其他情况下(特定例外除外)此
将等于全局对象(窗口
)。@Jon感谢您的回答!因为这是答案,我会将其格式化以供将来参考。因为这是答案,我会将其格式化以供将来参考