实现map & window.onload加载

之前一直是写C/S的,最近转做B/S了,记录一下自己在工作和学习中的JS小技巧,方便自己今后复习和查阅。

JS中默认只带array,有时候会需要key-value的map类功能,虽然array也支持array[key] = value的用法,但是看起来不爽,在网上找了一个map的实现,先记录下来,以后慢慢完善:

map的实现
function Map() {
    /** Map 大小 * */
    var size = 0;
    /** 对象 * */
    var entry = new Object();

    /** 存 * */
    this.put = function(key, value) {
        if (!this.containsKey(key)) {
            size++;
        }
        entry[key] = value;
    }

    /** 取 * */
    this.get = function(key) {
        if (this.containsKey(key)) {
            return entry[key];
        } else {
            return null;
        }
    }

    /** 删除 * */
    this.remove = function(key) {
        if (delete entry[key]) {
            size--;
        }
    }

    /** 删除所有 * */
    this.removeAll = function() {
        for ( var key in entry) {
            this.remove(key);
        }
    }

    /** 是否包含 Key * */
    this.containsKey = function(key) {
        return (key in entry);
    }

    /** 是否包含 Value * */
    this.containsValue = function(value) {
        for ( var prop in entry) {
            if (entry[prop] == value) {
                return true;
            }
        }
        return false;
    }

    /** 所有 Value * */
    this.values = function() {
        var values = new Array(size);
        for ( var prop in entry) {
            values.push(entry[prop]);
        }
        return values;
    }

    /** 所有 Key * */
    this.keys = function() {
        var keys = new Array(size);
        for ( var prop in entry) {
            keys.push(prop);
        }
        return keys;
    }

    /** Map Size * */
    this.size = function() {
        return size;
    }
}

另外,对于window.onLoad的实现,发现有一个小技巧需要注意,如果引用了第三方JS包,自己的window.onload可能会将其盖掉,所以最好像以下这样实现

var oldOnload = window.onload || function () {};
window.onload = function ()
{
    oldOnload();
    goSelectedYear();
}

第一行的写法是为了防止之前没有window.onload定义,后续调用时为undefined报JS错 。

 

刚发布完文章,就在网上看到一个十分简洁的map的写法,记录一下

var hashMap = {   
    Set : function(key,value){this[key] = value},   
    Get : function(key){return this[key]},   
    Contains : function(key){return this.Get(key) == null?false:true},   
    Remove : function(key){delete this[key]}   
}  
posted @ 2012-09-29 10:16  樱木不坏  阅读(153)  评论(0)    收藏  举报