如何在维护命名空间的同时创建类似方法链接的jQuery?

时间:2014-08-27 18:17:42

标签: javascript method-chaining

我已经看过回答类似问题的各种答案,但没有人真正回答我正在寻找的问题。这里的例子:

jQuery prototype and constructor function chaining

How does basic object/function chaining work in javascript?

我希望能够从函数中链接方法,但也可以将该函数用作命名空间。您可以将jquery对象用作如下函数:

$('selector');

但您也可以直接从$变量中获取方法,如下所示:

$.ajax(

这是如何实现的?我已经尝试过查看jquery源代码,但几乎无法跟进。

2 个答案:

答案 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.")