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感谢您的回答!因为这是答案,我会将其格式化以供将来参考。因为这是答案,我会将其格式化以供将来参考