读jquery.cookie.js源码学到的几个技巧?

一、兼容AMD、CommonJS和普通JS的写法

(function (factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        // CommonJS
        factory(require('jquery'));
    } else {
        // Browser globals
        factory(jQuery);
    }
}(function ($) {
    console.log('请允许我偷个懒,省略这个函数里的一堆代码');
}));

看到这里,其实自定义回调函数的写法也就出来了,但是为了凑出一篇形式上像样的博文,请允许我放到第三节来说回调函数(哎!别扔鸡蛋!)。

二、使用join方法把数组转为字符串

以前见过join方法,但是一直没用过,不熟,不知道它到底是干啥的,也不知道为啥要用它,直到看到下面这段代码:

return (document.cookie = [
                encode(key), '=', stringifyCookieValue(value),
                options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
                options.path    ? '; path=' + options.path : '',
                options.domain  ? '; domain=' + options.domain : '',
                options.secure  ? '; secure' : ''
            ].join(''));

在这个地方,这个document.cookie的值必须要是字符串,而且格式是这样的变态和销魂:

//格式:
name=value; expires=expiration_time; path=domain_path;domain=domain_name;secure

//举个栗子:
name=value;expires=Mon,22-Jan-07 07:10:24 GMT;domain=.wrox.com; path=/;secure

所以document.cookie的值需要通过很多三目运算计算后来获得,如果使用字符串来不停的“加等于”完全做不到,而javascript的数组里是可以放表达式的啊,计算出的结果会成为数组的一个项的值,最后用join('')转成字符串。

所以,以后遇到需要为一个变量设置一个字符串值,并且这个值是由很多个子值连接起来的,并且子值还需要根据情况做变化的情景时,果断的使用数组+三目运算符+join('')的组合吧!

三、javascript自定义回调函数的写法

用过jQuery的animation动画方法的人,对于那个方法里的回调函数应该都会觉得好用(大神手下留情,毕竟凑个开头不容易)。

那么我们自己能不能实现高大上的回调函数呢?

废话不说,直接上代码吧:

/*回调函数写法一:*/
(function(fa){
     if(0){
         console.log('没有执行回调函数')
     }else{
         fa();
     }
 }(function fss(){console.log('执行了回调函数的输出')}))

//执行了回调函数的输出


/*回调函数写法二:*/
function foo(fa){
    if(0){
         console.log('没有执行回调函数');
    }else{
          fa();
    }
};

function fss(){
     console.log('执行了回调函数的输出');
}

foo(fss);

//执行了回调函数的输出

有兴趣的童鞋可以复制代码放到chrome的console控制台里去执行一下。