在js库中$ .something(object)如何也是$(“something”)(一个函数)?

时间:2010-11-20 01:06:44

标签: javascript function object libraries

这可能是一个简单的问题,有一个非常复杂的答案,或者一些我完全错过的非常简单的问题,但是,在Prototype和jQuery等库中,$全局变量怎么样?是一个包含函数的对象,例如:

$.ajax.get(…);

也是一个函数本身,如:

$("…");

任何帮助,甚至是指向更具说明性的网站的指针都会非常棒,我只是好奇!

例如,如果我创建了一个包含子对象($)的函数(ajax),如:

var $ = function() {
    this.ajax = {};
    return this;
}; 

我可以像ajax一样访问$().ajax对象,但不像$.ajax那样,你如何获得它们?

3 个答案:

答案 0 :(得分:7)

在JavaScript中,函数是对象,对象可能有属性,所以它只是该语言的另一个很棒的部分!

var f = function(x) { return x; };
f.attr = "a";
f.attr; // => "a"
f(123); // => 123

答案 1 :(得分:3)

所有javascript函数都是javascript对象。

var obj = {};
var func = new function(){};

obj.property = "";
func.property = "";

您可以在此处了解所有相关信息:http://ejohn.org/apps/learn/#16

答案 2 :(得分:0)

var $ = (function () {

    var keys = { a: 1, b: 2, c: "Bob" },
        external_func = function (key, val) {
            if (val === undefined) { return keys[key]; }
            keys[key] = val;
            extend(external_func, { key : val });
        };

    function extend (obj, keys) {
        var key;
        for (key in keys) {
            if (keys.hasOwnProperty(key)) {
                obj[key] = keys[key];
            }
        }
    }

    extend(external_func, keys);
    external_func.setKey = function (key, val) { keys[key] = val; this[key] = val; };
    return external_func;
}());

jQuery比这更大,但这可能是一个如何构建一个保存键和值的系统的示例,您可以将其读作函数调用或属性。

例如,如果密钥中包含URL中所有查询的细分,或者包含该页面的所有Cookie,则可以执行以下操作:

曲奇( “登录”); 饼干[“登录”]; Cookie.username;

查询( “PAGE_NAME”); 查询[ “PAGE_NAME”]; Query.page_name;

您必须确保将其视为只读,除非您使用该功能,使用附加到该功能的setCookie方法,或者您只定位支持原生getter的浏览器和塞特斯。