/*
 * DOM的继承, JQ是用一个工厂函数,Prototype是用原型链,但是在IE67只能静态的生成方法.
 * 两者合二为一为怎样呢? 一下就是我们的实现, IE7以上用原型继承Element,IE7和IE6,用构造函数,为了随时能切换在方法中写了dom()方法来获取DOM元素方便切换.
 */
<div class="main1" id="main">111a</div>
<div class="main2">222b</div>
<script type="text/javascript">
/*----继承开始----*/
var Elementextend = function(oldO,newO){
    for(var i in newO){
        ~function(){
            var value = newO[i];
            oldO[i] = function(){
                return value.apply(null,[this].concat(Array.prototype.slice.call(arguments)))
                };
            }();
        }
    }
var ElementextendforIe67 = function(oldO,newO){
    for(var i in newO){
        ~function(){
            var value = newO[i];
            oldO[i] = function(){
                return value.apply(null,[this.node].concat(Array.prototype.slice.call(arguments)))
                };
            }();
        }
    }
var Method = {
    show : function(ele){
        alert(ele.id)
          return $(ele)
        },
    html : function(ele){
        alert(ele.innerHTML);
          return $(ele)
        },
     dom : function(ele){
         return ele;
         }
    }
var isElement = !!window.Element;
if(isElement){
    Elementextend(HTMLElement.prototype,Method);
    }else{
    var myElement = function(node){
        this.node = node;
        }
    ElementextendforIe67(myElement.prototype,Method);
    }
/*----继承结束----*/
/*----IE67的工厂函数----*/
function $(node){
    var arr = [];
    if(!node.length){
        var renode = null;
        isElement ? renode = node : renode =  new myElement(node);
        return renode;
        }
    for(var i=0,j=node.length;i<j;i++){
        isElement ? arr.push(node[i]) : arr.push(new myElement(node[i]));
        }
    return arr;
    }
/*----实例----*/
var main = document.getElementsByTagName("div");
var a = $(main)[0].show().html().dom().className;
alert(a)
</script>