From Javascript's kiss

按下2键或者shift+ctrl+1键查看效果。

var KeyEvent = function(aKeyCode, oFlag){
    this.keyCodes = aKeyCode || [];
    this.key = oFlag ||
    {};
}
KeyEvent.prototype._addListener = function(elem, type, handle, context){
    var that = this;
    var _handle = function(e){
        e = e || window.event;
        var codeFlag = true;
        var keyFlag = true;
        //检查参数指明的keyCode有没有
        for (var i = 0, l = that.keyCodes.length; i < l; i++) {
            if (e.keyCode !== that.keyCodes[i]) {
                codeFlag = false;
            }
        }
        //检查参数指明的ctrl,shift,alt键是否按下。
        for (var k in that.key) {
            if (!e[k]) {
                keyFlag = false;
            }
        }
        if (keyFlag && codeFlag) {
            handle.call(context || elem, e);
        }
    }
    if (elem.addEventListener) {
        elem.addEventListener(type, _handle, false);
    }
    else if (elem.attachEvent) {
        elem.attachEvent("on" + type, _handle);
    }
    else {
        elem["on" + type] = _handle;
    }
}
KeyEvent.prototype.keydown = function(handle, context){
    this._addListener(document, "keydown", handle, context);
}
KeyEvent.prototype.keyup = function(handle, context){
    this._addListener(document, "keyup", handle, context);
}
KeyEvent.prototype.keypress = function(handle, context){
    this._addListener(document, "keypress", handle, context);
}


var Event = {
    type: "keydown",
    data: {
        name: "Supersha"
    }
}
onload = function(){
    var key = new KeyEvent([49],{"shiftKey":true,"ctrlKey":true});
    key.keydown(function(e){
        alert(e.keyCode);
    });
    
    var key2 = new KeyEvent([50]);
    key2.keydown(function(e){
        alert(this.data.name);
    }, Event);
}