jQuery中的编程范式详解

2020-05-22 21:57:08易采站长站整理

    function(cart, inventory) {
        // 这里使用module pattern来返回my/shirt模块对外暴露的API
        return {
            color: “blue”,
            size: “large”
            addToCart: function() {
                // decrement是my/inventory对外暴露的API
                inventory.decrement(this);
                cart.add(this);
            }
        }
    }
);

3. 神奇的$:对象提升

当你第一眼看到$函数的时候,你想到了什么?传统的编程理论总是告诉我们函数命名应该准确,应该清晰无误的表达作者的意图,甚至声称长名字要优于短名字,因为减少了出现歧义的可能性。但是,$是什么?乱码?它所传递的信息实在是太隐晦,太暧昧了。$是由prototype.js库发明的,它真的是一个神奇的函数,因为它可以将一个原始的DOM节点提升(enhance)为一个具有复杂行为的对象。在prototype.js最初的实现中,$函数的定义为
var $ = function (id) {
    return “string” == typeof id ? document.getElementById(id) : id;
};

这基本对应于如下公式
      e = $(id)

这绝不仅仅是提供了一个聪明的函数名称缩写,更重要的是在概念层面上建立了文本id与DOM element之间的一一对应。在未有$之前,id与对应的element之间的距离十分遥远,一般要将element缓存到变量中,例如
var ea = docuement.getElementById(‘a’);
  var eb = docuement.getElementById(‘b’);
  ea.style….
但是使用$之后,却随处可见如下的写法
$(‘header_’+id).style…
  $(‘body_’+id)….
id与element之间的距离似乎被消除了,可以非常紧密的交织在一起。

prototype.js后来扩展了$的含义,
function $() {
    var elements = new Array();
   
    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        if (typeof element == ‘string’)
          element = document.getElementById(element);