在JavaScript中同时作为函数变量

时间:2015-06-13 11:48:17

标签: javascript jquery

我真的想要实现这样的东西。

myVar.myAnotherVar;
myVar.myMethod();
myVar("sample text");

这就是jQuery实现它的方式

jQuery.fn;
jQuery.ajax();
jQuery("#myBtn");

如何实现类似jQuery的东西,它可以保存单个命名空间中的所有内容?它与原型有关吗?如何使用变量同时作为函数调用?

谢谢:)

1 个答案:

答案 0 :(得分:6)

JavaScript中的函数是对象,您可以像任何其他对象一样随意添加属性:

function foo() {
    // Code for when you call `foo` goes here
}
foo.someData = "bar";
foo.someFunction = function() {
    // Code for when you call `foo.someFunction` goes here
};

jQuery的功能稍微复杂一些,有点不寻常,有几种方式:

  1. jQuery函数(通常别名为$)只是对创建新对象的构造函数的调用的包装。 (构造函数称为init。)

  2. 他们在名为init的{​​{1}}函数的属性中添加了对prototype函数的jQuery属性的引用。这两个属性(fnjQuery.fn)指的是当您使用init.prototype时将成为实例原型的对象。

  3. 他们new init引用了同一个对象,即使jQuery.prototype未用作构造函数。这样jQuery将为$() instanceof $

  4. 但是你不必为了做你所描述的事情而做那些事情。当然,可以,但你不必这样做。

    如果你想做这两件事,基本结构如下:

    true