zoukankan      html  css  js  c++  java
  • 读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控制台里去执行一下。

  • 相关阅读:
    vue.js click点击事件获取当前元素对象及获取自定义属性
    在C#的MVC中 Vue的基本用法实例
    使用Dictionary做特殊的json字符串时(可以随意起key的名称)怎么将json字符串反序列化为json匿名对象?及匿名对象的使用方法
    C#生成城市按照一定格式且按字母顺序的方法
    sid-msg.map文件概述
    Linux中 /boot 目录介绍 【转载】
    suricata 命令行解释【转】
    Ubuntu下查看软件版本及安装位置【转】
    linux top命令查看内存及多核CPU的使用讲述【转】
    linux下如何查看多核负载情况【转】
  • 原文地址:https://www.cnblogs.com/macliu/p/5189918.html
Copyright © 2011-2022 走看看