读jquery.cookie.js源码学到的几个技巧
2016-02-15 09:16 盛世游侠 阅读(419) 评论(0) 编辑 收藏 举报一、兼容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控制台里去执行一下。