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

How can I create jQuery like method chaining while maintaining a namespace?

本文关键字:jQuery 链接 方法 创建 维护 命名空间      更新时间:2023-09-26

我在SO上查看了各种回答类似问题的答案,但没有一个真正回答我想要的问题。此处的示例:

jQuery原型和构造函数函数链接

javascript中的基本对象/函数链接是如何工作的?

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

$('selector');

但是您也可以直接从$变量中获取方法,比如:

$.ajax(

这是如何实现的?我已经尝试过查找jquery源代码,但几乎不可能找到。

在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语言中,它都可以用对象来模拟,如上所述。我想说$只是感觉像是一个命名空间,因为它是一个相当大的库,但它是一种巨大的库,它被实现为一个对象,也是一个函数,具有许多属性。

试试这个:

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.")的第二个函数