JS模式:jq中简单的模式--》采摘自js设计(tomxu_version)

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<script>
//据说这就是组合模式了,就是逸带的感觉;
var $ = jQuery = window.$ = function(){};

$.prototype = {
    addClass : function(value){
        var classNames, i ,l , elem, setClass, c, cl;
        if( $.ifFunction(value) ){
            return $.each(this,function(j){
                $(this).addClass( value.call(this,j,this.ClassName) );
            })
        };
        
        if(value && typeof value === "string"){
            className = this.className.split(/\b/);
            for(var i=0, l=this.length; i<l; i++){
                elem = this[i]; //这个就是又一个each循环了;
                if(elem.nodeType === 1){
                    if( !elem.className && className.length === 1 ){
                        elem.className = value;
                    }else{
                        setClass = " " + elem.className + " ";
                        for(c=0, cl=className.length; c<cl; c++){
                            if( !!setClass.indexOf( className[c] ) ){
                                setClass += className[c] + " ";
                            }
                        };
                        setClass += value;
                        elem.calssName = $.trim( setClass );
                    }
                }
            }
        };
        return this;
    }
};

//facade__外观模式;
$.ajax  = function(){
    
};
$.ajax.setting.xhr = window.ActiveXObject ? activeObject() : createStndardXHR();
function createStandardXHR(){
    try{
        return new window.XMLHttpRequest;
    }catch(e){};
};
function activeXObject(){
    try{
        return new window.activeXObject("Microsoft","XMLHTTP");
    }catch(e){}
};

//jQ中的观察者模式(p/s);
//使用包装包装一个jQ出来;
(function($){
    var o = $({}); // 让o有了jq的继承,可以使用jq的工具方法和函数
    $.subscribe = function(){
        o.bind.apply(o,arguments);
    };
    $.unsubscribe = function(){
        o.unbind.apply(o,arguments)
    };
    $.publish = function(){
        o.trigger.apply(o,arguments)
    }
}(jQuery))
// 注意:这里面使用的是apply 而不是 call; apply可以直接传arguments;

</script>
</body>
</html>

 

posted @ 2013-11-21 23:57  方方和圆圆  阅读(396)  评论(0编辑  收藏  举报

再过一百年, 我会在哪里?