【问题标题】:in js libraries how can $.something (object) also be $("something") (a function)?在 js 库中 $.something (object) 如何也可以是 $("something") (一个函数)?
【发布时间】:2010-11-20 01:06:43
【问题描述】:

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

$.ajax.get(…);

还有一个函数本身,比如:

$("…");

任何帮助,甚至是指向更解释性网站的指针都会很棒,我只是很感兴趣!

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

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

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

【问题讨论】:

  • 函数是javascript中的一等公民。它们可以有自己的属性、函数和原型。

标签: javascript function object libraries


【解决方案1】:

在 JavaScript 中,函数是对象,而对象可能具有属性,所以它只是语言的另一个精彩部分!

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

【讨论】:

  • 谢谢@maerics,我知道所有函数都是对象,但是,例如,你会如何编写这样的东西?我会用一个例子来更新我的问题。
  • @Jonathon: 期待后续行动,我已经添加了一个示例 =)
【解决方案2】:

所有 javascript 函数都是 javascript 对象。

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

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

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

【讨论】:

    【解决方案3】:
    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("已登录"); Cookie["登录"]; Cookie.username;

    查询("page_name"); 查询["page_name"]; 查询.page_name;

    您只需要确保将其视为只读,除非您使用该函数,使用附加到该函数的 setCookie 方法,或者您只针对支持本机 getter 和 setter 的浏览器.

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 2021-12-10
      • 1970-01-01
      • 2019-10-02
      • 2013-03-11
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多