我已经看过回答类似问题的各种答案,但没有人真正回答我正在寻找的问题。这里的例子:
jQuery prototype and constructor function chaining
How does basic object/function chaining work in javascript?
我希望能够从函数中链接方法,但也可以将该函数用作命名空间。您可以将jquery对象用作如下函数:
$('selector');
但您也可以直接从$变量中获取方法,如下所示:
$.ajax(
这是如何实现的?我已经尝试过查看jquery源代码,但几乎无法跟进。
答案 0 :(得分:0)
在Javascript函数中是第一类对象。特别是,它们是对象。
var greet = function(name) {console.log("Hello, " + name + "!"); };
greet.lang = "English";
合法。然后以下两个都是有效的:
greet("Alice"); // prints Hello, Alice!
console.log(greet.lang); // prints English
我认为将$(...)
称为构造函数是不正确的。在Javascript中,构造函数和函数之间的界限很模糊,但通常我会说构造函数与new
一起使用,并且按照惯例,以大写字母开头。 $
只是一个对象,特别是一个函数,因此可以调用,并具有可以访问的其他属性。
我也不会在$
或我的示例greet
中调用命名空间。您可能会想到Java中的包语法,其中com.mycompany.util.StringFunctions
将具有包/命名空间com.mycompany.util
,或者在C ++中可能将其写为MyCompany::Util::StringFunctions
。 Javascript并没有这个概念,但是或多或少任何OO语言都可以用对象模拟,如上所述。我会说$
只是感觉就像它的命名空间一样,因为它是一个相当庞大的库,但它是一个巨大的库,它是作为一个对象实现的。也是一个具有许多属性的函数。
答案 1 :(得分:0)
试试这个:
var foo = function (){
alert ("I'm a function beep beep");
};
foo.bar = "This is a string";
foo.otherFoo = function (param) {
alert ("I'm also a function blup blup"+param);
};
然后你可以调用第一个函数foo()
,变量foo.bar
或第二个函数foo.otherFoo(" and more blup.")