jQuery如何将jQuery对象同时作为函数和对象属性?

13

我一直好奇jQuery如何既可以是一个函数又可以是一个对象属性。

你可以像使用函数一样使用它,比如 jQuery(...),也可以像使用属性一样使用它,比如 jQuery.ajax(...)。

在JavaScript中,怎样实现这样的功能呢?

3个回答

15

在 JavaScript 中,函数是对象。因此,您可以拥有自己的主函数。

var $ = function() {  alert('wat'); }

然后扩展它

$.fadeTo = function() { alert('fadeto'); }

嗯,我明白了... Javascript类没有静态/动态方法的概念? - SBSTP
1
@SBSTP:JavaScript根本就没有类,它是一种原型语言,而不是基于类的语言。它有构造函数。构造函数用来创建对象。 - T.J. Crowder

9
因为在JavaScript中,函数是可以拥有属性的对象:
function test() { ... }

test.a = function () { ... };
test.a(); // totally valid

啊,我没意识到这点。问题:在你的例子中,test.a 是否可以在初始的 function test() {...} 声明内定义,或者必须单独声明 test.a 才能在 test() 之外访问?换句话说,是否可能从 test(){...} 声明内定义 a 属性,以便仍然可以从 test() 外部访问它?我似乎找不到其他地方的答案。 - Brandon

2
我认为在代码概念方面,什么是jQuery的概念还是相当令人困惑的。我发现了这个链接,它以非常简单和易于理解的方式解释了jQuery架构:http://blog.mikecouturier.com/2010/02/beginning-with-jquery-solid-foundation_22.html 简而言之,$ 是一个名为“jQuery”的JavaScript函数的别名,并且使用点符号调用的方法,例如 $.trim() 在 'JavaScript jQuery' 函数上是静态方法。注意,在JavaScript中,函数从对象继承,因此函数是JavaScript中的对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接