• test


    //1.手动实现localStorage
    if (!window.localStorage) {
        //首先定义window中的 属性
        Object.defineProperty(window, "localStorage", new (function () {
            var aKeys = [], oStorage = {};
            Object.defineProperty(oStorage, "getItem", {
                value: function (sKey) { return sKey ? this[sKey] : null; },
                writable: false,
                configurable: false,
                enumerable: false
            });
            Object.defineProperty(oStorage, "key", {
                value: function (nKeyId) { return aKeys[nKeyId]; },
                writable: false,
                configurable: false,
                enumerable: false
            });
            // 利用cookie  进行保存  并设置过期时间
            Object.defineProperty(oStorage, "setItem", {
                value: function (sKey, sValue) {
                    if (!sKey) { return; }
                    document.cookie = escape(sKey) + "=" + escape(sValue) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
                },
                writable: false,
                configurable: false,
                enumerable: false
            });
            Object.defineProperty(oStorage, "length", {
                get: function () { return aKeys.length; },
                configurable: false,
                enumerable: false
            });
            Object.defineProperty(oStorage, "removeItem", {
                value: function (sKey) {
                    if (!sKey) { return; }
                    document.cookie = escape(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
                },
                writable: false,
                configurable: false,
                enumerable: false
            });
            this.get = function () {
                var iThisIndx;
                for (var sKey in oStorage) {
                    iThisIndx = aKeys.indexOf(sKey);
                    if (iThisIndx === -1) { oStorage.setItem(sKey, oStorage[sKey]); }
                    else { aKeys.splice(iThisIndx, 1); }
                    delete oStorage[sKey];
                }
                for (aKeys; aKeys.length > 0; aKeys.splice(0, 1)) { oStorage.removeItem(aKeys[0]); }
                for (var aCouple, iKey, nIdx = 0, aCouples = document.cookie.split(/s*;s*/); nIdx < aCouples.length; nIdx++) {
                    aCouple = aCouples[nIdx].split(/s*=s*/);
                    if (aCouple.length > 1) {
                        oStorage[iKey = unescape(aCouple[0])] = unescape(aCouple[1]);
                        aKeys.push(iKey);
                    }
                }
                return oStorage;
            };
            this.configurable = false;
            this.enumerable = true;
        })());
    }
    
    //2.Node Events 模块
    class EventEmitter {
        constructor() {
            //事件监听函数保存的地方
            this.events = {};
        }
        on(eventName, listener) {
            if (this.events[eventName]) {
                this.events[eventName].push(listener);
            } else {
                //如果没有保存过,将回调函数保存为数组
                this.events[eventName] = [listener];
            }
        }
        emit(eventName) {
            //emit触发事件,把回调函数拉出来执行
            this.events[eventName] && this.events[eventName].forEach(listener => listener())
        }
    }
    let event = new EventEmitter();
    event.on('嗨', function () {
        console.log('你好');
    });
    event.emit('嗨');
    
    
    //3.区间合并 比较区间的第二个元素 如果后一个大于前一个 则进行合并  否则不合并
    var merge = function (attrs) {
        if (attrs.length < 2) return attrs
        attrs.sort((a, b) => a[0] - b[0])  //先进行排序
        let curr = attrs[0]  //存储数组内的一个集合
        let result = []
        for (let attr of attrs) {
            if (curr[1] >= attr[0]) {
                curr[1] = Math.max(curr[1], attr[1])
            } else {
                result.push(curr)
                curr = attr
            }
        }
        if (curr.length !== 0) {
            result.push(curr)
        }
        return result
    };
    merge([[1, 3], [2, 6], [8, 10], [15, 18]])
    

      

  • 相关阅读:
    类成员函数的重载、覆盖和隐藏区别 (C++)(转)
    man时括号里的数字是啥意思
    Redis事务
    功能接口
    持久化方式
    宿主
    路由
    静态文件
    Log4Net 配置
    Redis命令与配置
  • 原文地址:https://www.cnblogs.com/xiao-yaolx/p/13218501.html
Copyright © 2020-2023  润新知