国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js設(shè)計(jì)模式

brianway / 1836人閱讀

摘要:基礎(chǔ)知識(shí)變量聲明數(shù)據(jù)類型類型轉(zhuǎn)換基礎(chǔ)教程變量他是用于存儲(chǔ)信息的一個(gè)容易規(guī)則他是敏感大小寫的和他是個(gè)不同的變量變量名字必須以字母或者下劃線開(kāi)始數(shù)字不可以你不用在中創(chuàng)建這個(gè)動(dòng)作經(jīng)常揮別稱之為聲明您可以通過(guò)語(yǔ)句來(lái)聲明變量注意的地方如果變量再次被定

基礎(chǔ)知識(shí)

變量,聲明,數(shù)據(jù)類型,
類型轉(zhuǎn)換

/**
 * 基礎(chǔ)教程
 */
(function(){
    /**
     * 變量
     * 他是用于存儲(chǔ)信息的一個(gè)容易
     * 規(guī)則
     * 他是敏感大小寫的 (Y和y他是2個(gè)不同的變量)
     * 變量名字必須以字母或者下劃線開(kāi)始 數(shù)字不可以 $("#id")
     */
    x = 5;
    length = 66.15;
    // 你不用var
    var k = "YUNFENGCHENG";
    alert(k)
    k = "USPCAT.COM";
    //在javascript中 創(chuàng)建這個(gè)動(dòng)作經(jīng)常揮別稱之為"聲明"
    //您可以通過(guò)var 語(yǔ)句來(lái)聲明jS變量
    var x = "44";
    var carname;
    //注意的地方
    //如果變量再次被定義一會(huì)他的原始數(shù)值將不被持有
})()
/**
 * 數(shù)據(jù)類型和類型轉(zhuǎn)換
 */
(function(){
/**
 * 基本數(shù)據(jù)類型(3種)
 * (1)數(shù)字 number
 *   例如 3.1415927 ,0.251,.2,100,1.478E
 * (2)字符串
 *   string
 * (3)布爾 booble
 */
 //數(shù)字型轉(zhuǎn)字符串
 var num1 = 3.1415927;
 var str1 = Number.toString(num1); 
 document.write(typeof str1 == "string");//true
 document.write("
") //四舍五入 var num2 = num1.toFixed(2); document.write(num2); document.write("
") //返回指定的為數(shù)的數(shù)字 var num3 = num1.toPrecision(4); document.write(num3); document.write("
") //(Math) 介紹一點(diǎn)方法 //四舍五入round document.write(Math.round(4.7)); document.write("
") //隨機(jī)出處理0~1 document.write(Math.random()); document.write("
") //0~10的隨機(jī)數(shù) document.write(Math.floor((Math.random()*11))); document.write("
") document.write("-------------------------------
") //字符串 //注意(轉(zhuǎn)義) pca"t 要輸入 pca"t 換行 /** " " & 和好+ 回車  f 換頁(yè) */ //屬性 length indexof substring chartAt(整數(shù)) //如何轉(zhuǎn)成數(shù)字 var str2 = "USPCAT.COM"; var str3 = "3.14"; var number = Number(str3); document.write(typeof number == "number"); document.write("
") document.write((str2 - 0)+"
");//NaN 非數(shù)值 document.write((str3 - 1)+"
");//如果是減法他回自動(dòng)將字符串轉(zhuǎn)成數(shù)字 document.write((str3 + 1)+"
");//加法會(huì)當(dāng)成字符串的拼接操作 //布爾類型(boolean) //true | false var s = ""; var o = {};//true var l = [];//true var n = null; var f = false; var u = undefined; document.write("-------------------------------
") if(!s){ document.write("s is false
") } if(!o){ document.write("o is false
") } if(!l){ document.write("l is false
") } if(!n){ document.write("n is false
") } if(!f){ document.write("f is false
") } if(!u){ document.write("u is false
") } /** s is false f is false u is false n is false */ if(str != "" && str != null && str != undefined){ //... } if(str){ //... } /** * 2復(fù)合類型 * (1)數(shù)組-->有序的集合(array):下標(biāo)(index) 是從0開(kāi)始的 * 例子 * var arr = new Array(); * (2)特殊的對(duì)象-->函數(shù)(function) */ /** * 特殊值 * (1)null 不是有效的對(duì)象數(shù)組數(shù)組字符串 他們?yōu)榭? * (2)undefined 他是代表沒(méi)有定義 和空不是一個(gè)概念 * [沒(méi)有] 但是有容易 有一個(gè)盒子但是盒子里賣沒(méi)有東西 * undefined 連盒子也沒(méi)有 */ /** * 內(nèi)置特殊對(duì)象 * Data對(duì)象 * Error錯(cuò)誤對(duì)象 * ReExp對(duì)象 */ })()
/**
 * 數(shù)據(jù)類型和類型轉(zhuǎn)換
 */
(function(){
    /**
      * 2復(fù)合類型
      * (1)數(shù)組-->有序的集合(array):下標(biāo)(index) 是從0開(kāi)始的     
     */
    //屬性
    //constructor 返回對(duì)創(chuàng)建次對(duì)象的數(shù)組的函數(shù)引用
    //index 
    //input
    //*length
    //方法
//    *concat 合并數(shù)組
//    *join 把數(shù)組按照一定的各式進(jìn)行串聯(lián)
//    *push 數(shù)組的追加
//    *pop 刪除數(shù)組返回的最后一個(gè)元素
    //sort toString shift 刪除并且返回?cái)?shù)組的第一個(gè)元素
    var arr = new Array();
    arr.push(1);
    arr.push(55);
    arr.push(5);
    arr.push(3);
    arr.push(9);
    //alert(arr.length)
    var arr2 = [1,2,3,45,6,7,8];
    //alert(arr2.join(":"));
    //alert(arr.concat(arr2).toString())
    for (var i = 0; i < arr2.length; i++) {
        document.write(arr2[i]+"
"); } //擴(kuò)展array的方法 Array.each = function(array,fn){ for (var i = 0; i < array.length; i++) { fn(array[i]) } } Array.each(arr2,function(v){ document.write(v+"
"); }) })()
高級(jí)類 繼承和聚合 接口

1.注解的方法
2.屬性檢驗(yàn)法
3.鴨式變形法

/**
 * 1.注釋方法
 * 最簡(jiǎn)單,但是功能也是最弱的
 * 他利用inerface和implement"文字"
 * 把他們用注解的方式顯示的表現(xiàn)出來(lái)
 */
(function(){
    /**
     * 用注釋來(lái)定義一個(gè)接口
     * interface PersonDao(){
     *     function add(obj);
     *  function remove(obj);
     *  function find(id);
     * }
     */
    //我們用注釋的方式來(lái)實(shí)現(xiàn)他
    /**
     * PersonDaoImpl implement interface
     */
    var PersonDaoImpl = function(){
        
    }
    PersonDaoImpl.prototype.add = function(obj){
        //..
    }
    PersonDaoImpl.prototype.remove = function(obj){
        //..
    }
    PersonDaoImpl.prototype.find = function(id){
        //..
    }
    /**
     * 千萬(wàn)不要感覺(jué)他是沒(méi)有任何意義的
     * 1.大型的項(xiàng)目靠得就是規(guī)范和標(biāo)準(zhǔn)
     * 2.這樣的寫法會(huì)交你的程序員在沒(méi)有寫實(shí)現(xiàn)之前有充分時(shí)間做代碼的設(shè)計(jì)和架構(gòu)
     * 3.缺點(diǎn):要認(rèn)為的遵守
     */
})()
/**
 * 屬性檢驗(yàn)法
 */
(function(){
    /**
     * 用注釋來(lái)定義一個(gè)接口
     * interface PersonDao(){
     *     function add(obj);
     *  function remove(obj);
     *  function find(id);
     * }
     */
    //我們用注釋的方式來(lái)實(shí)現(xiàn)他
    var PersonDaoImpl = function(){
        this.implementInterface = ["PersonDao"];        
    }
    PersonDaoImpl.prototype.add = function(obj){
        alert(obj)
        //..
    }
    PersonDaoImpl.prototype.remove = function(obj){
        //..
    }
    PersonDaoImpl.prototype.find = function(id){
        //..
    }    
    function addObj(obj){
        var PersonDao = new PersonDaoImpl();
        //開(kāi)始檢查
        if(!impl(PersonDao,"PersonDao")){
            throw new Error("類PersonDaoImpl沒(méi)有實(shí)現(xiàn)接口PersonDao");
        }else{
            PersonDao.add(obj);
        }
    }
    addObj("USCAPT.COM");
    /**
     * 他接受的是一個(gè)不定參數(shù)
     */
    function impl(Object){
        //遍歷出入對(duì)象的屬性
        for(var i=1;i
/**
 * 3.鴨式變形法
 * 這個(gè)方法來(lái)源于一個(gè)國(guó)外的老頭他有一個(gè)名言(jim)
 * "像鴨子一樣走路并且會(huì)嘎嘎叫的東西就是鴨子"
 * 換言之
 * 如果對(duì)象具有與接口定義的方法名字的同命所有方法 那么我就認(rèn)為你就是實(shí)現(xiàn)本接口
 */
(function(){
    //定義一個(gè)接口類
    var Interface = function(name,methods){
        if(arguments.length != 2){
            alert("interface must have two paramters...");
        }
        this.name = name;//這個(gè)是接口的名字
        this.methods = [];//定義個(gè)空數(shù)組來(lái)轉(zhuǎn)載函數(shù)名
        for (var i = 0; i < methods.length; i++) {
            if(typeof methods[i] != "string"){
                alert("method name must is String ...")
            }else{
                this.methods.push(methods[i])
            }
        }
    }
    //定義接口的一個(gè)靜態(tài)方法來(lái)實(shí)現(xiàn)接口與實(shí)現(xiàn)類的直接檢驗(yàn)
    //靜態(tài)方法不要寫成Interface.prototype.* 因?yàn)檫@是寫到接口原型連上的
    //我們要把靜態(tài)的函數(shù)直接寫到類層次上
    Interface.ensureImplements = function(object){
        if(arguments.length<2){
            alert("必須最少是2個(gè)參數(shù)");
            return false;
        }
        //遍歷
        for (var i = 1; i < arguments.length; i++) {
            var inter = arguments[i];
            //如果你是接口就必須是Interface類型的
            if(inter.constructor != Interface){
                throw new Error("if is interface class must is Interface type");
            }
            //遍歷函數(shù)集合并分析
            for (var j = 0; j < inter.methods.length; j++) {
                var method = inter.methods[j];
                //實(shí)現(xiàn)類中必須有方法名字 和 接口中所有的方法名項(xiàng)目
                if(!object[method] || typeof object[method] != "function"){
                    throw new Error("實(shí)現(xiàn)類并且沒(méi)有完全實(shí)現(xiàn)接口中的所有方法...");
                }
            }
        }
    }
    //應(yīng)用
    //定義自己的接口
    var GridMananger = new Interface("GridMananger",["add","remove","list"]);
    var FormMananger = new Interface("FormMananger",["save"])
    
    function commManager(){
        //先實(shí)現(xiàn)方法
        this.add = function(){
            alert("ok")
        }
        this.remove = function(){}
        this.list = function(){}
        this.save = function(){}
        //檢驗(yàn)
        Interface.ensureImplements(this,GridMananger,FormMananger)
    }
    var c = new commManager();
    c.add();
    /**
     * 接口的重要性
     * 1.大型項(xiàng)目提高代碼的靈活度
     * 2.松耦合
     * 3.在團(tuán)隊(duì)開(kāi)發(fā)的時(shí)候,有寫時(shí)候你在真正編碼之前就可以寫API(自己的類庫(kù))
     * 那這類庫(kù)就可以時(shí)候在進(jìn)行實(shí)現(xiàn)
     * 開(kāi)始的時(shí)候我們就可以對(duì)整個(gè)項(xiàng)目是否可行,通過(guò)接口就可模擬出來(lái)
     */
    
})()



閉包

門戶大開(kāi)類型

用命名規(guī)范區(qū)別私有和共有的方式

閉包

/**
 * 信息的隱藏是最終的目的,封裝只不過(guò)是隱藏的一種方法 
 */
(function(){
    /**
     * 1.門戶大開(kāi)類型
     * 2.用命名規(guī)范區(qū)別私有和共有的方式
     * 3.閉包
     */
    //門戶打開(kāi)型
    function Person(age,name){
        this.name = name;
        if(!this.checkAge(age)){
            throw new Error("年齡必須在0到150之間");
        }
        this.age = age;
    }
    //var p = new Person(-10,"JIM");
    //alert(p.age)
    //解決上述問(wèn)題
    Person.prototype = {
        checkAge:function(age){
            if(age>0 && age < 150){
                return true;
            }else{
                return false;
            }
        }
    }
    Person.prototype["getName"] = function(){
        return this.name || "USPCAT.COM";    
    }
    //var p = new Person(-10,"JIM");
    var p = new Person(27,"JIM");
    var p2 = new Person(27);
    alert(p2.getName());

})()

上面這種門戶大開(kāi)的都是公用的不是很好,應(yīng)該提前做好閉包

(function(){
    //用命名規(guī)范來(lái)區(qū)別私有和共有變量
    function Person(name,age,email){
        //定義私有變量
        this._name;//私有
        this._age;//私有
        this.setName(name);
        this.setAge(age);
        this.email = email;//共有
        
    }
    Person.prototype = {
        setName:function(name){
            this._name = name;
        },
        setAge :function(age){
            if(age>0 && age < 150){
                this._age = age;
            }else{
                throw new Error("年齡必須在0到150之間");
            }            
        }
    }
    var p = new Person("JIM",-1,"JIM@USPCAT.COM");
})()
/**
 * 閉包實(shí)現(xiàn)封裝
 */
(function(){
    function person(name,age,email,sex){
        this.email = email;//public 變量
        //get
        this.getName = function(){
            return this.name;
        }
        this.getAge = function(){
            return this.age;
        }        
        //set
        this.setName = function(name){
            this.name = name
        }
        this.setAge = function(age){
            if(age>0 && age < 150){
                this.age = age
            }else{
                throw new Error("年齡必須在0到150之間");
            }                
        }
        var _sex = "M";//這也是私有變量的編寫方式
        this.getSex = function(){
            return _sex;
        }
        this.setSex = function(){
            _sex = sex
        }
        this.init = function(){
            this.setName(name);
            this.setAge(age);
        }
        this.init();
    }
    //ceshi 
    var p = new person("JIM",-1,"www.USPCAT@126.COM")
})()
/**
 * 普通的屬性和函數(shù)是作用早對(duì)象上的
 * 而靜態(tài)的函數(shù)是定義到類上面的
 */
(function(){
    function Person(name,age){
        this.name = name;
        this.showName = function(){
            alert(this.name)
        }
    }
    //第一種靜態(tài)函數(shù)的寫法
    Person.add = function(x,y){
        return x+y;
    }
    //alert(Person.add(10,20))
    //第二種方式
    //用類中類的方式完成沒(méi)一個(gè)對(duì)象全擁有相同的屬性和闡述
    var cat = (function(){
        //私有靜態(tài)屬性
        var AGE = 10;
        //私有函數(shù)
        function add(x,y){
            return x+y;
        }
        return function(){
            this.AGE = AGE;
            this.add = function(x,y){
                return add(x,y)
            }
        }
    })()
    alert(new cat().add(1,2)+"  "+new cat().AGE);
    alert(new cat().AGE);
    /**
     * 1.保護(hù)內(nèi)部數(shù)據(jù)完整性是封裝一大用處
     * 2.對(duì)象的重構(gòu)變得很輕松,(如果沒(méi)有封裝你感動(dòng)正在用這的代碼嗎?)
     * 3.弱化模塊直接的耦合
     * 弊端
     * 私有的方法他會(huì)變得很難進(jìn)行單元測(cè)試
     * 使用封裝就會(huì)意味著與復(fù)雜的代碼打交道
     * 最大問(wèn)題是封裝在javascript中是很難實(shí)現(xiàn)的
     */
})()


單體模式

1.普通的單體
2.具有局部變量的強(qiáng)大單體
3.惰性單體
4.分支單體

函數(shù)的鏈?zhǔn)秸{(diào)用 工廠模式 橋梁模式 門面模式 組合模式 適配模式 裝飾者 享元模式 代理模式 責(zé)任鏈模式 命令模式 觀察者模式 類引擎

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/87762.html

相關(guān)文章

  • JS 外觀模式

    摘要:外觀模式在中常常用于解決瀏覽器兼容性問(wèn)題。實(shí)現(xiàn)外觀模式不僅簡(jiǎn)化類中的接口,而且對(duì)接口與調(diào)用者也進(jìn)行了解耦。外觀模式的優(yōu)勢(shì)是易于使用,而且本身也比較輕量級(jí)。 1. 簡(jiǎn)介 外觀模式(Facade)為子系統(tǒng)中的一組接口提供了一個(gè)一致的界面,此模塊定義了一個(gè)高層接口,這個(gè)接口值得這一子系統(tǒng)更加容易使用。外觀模式在JS中常常用于解決瀏覽器兼容性問(wèn)題。 2. 實(shí)現(xiàn) 外觀模式不僅簡(jiǎn)化類中的接口,而且...

    BothEyes1993 評(píng)論0 收藏0
  • JS 橋接模式

    摘要:簡(jiǎn)介橋接模式將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。同時(shí)橋接模式也有自己的缺點(diǎn)大量的類將導(dǎo)致開(kāi)發(fā)成本的增加,同時(shí)在性能方面可能也會(huì)有所減少。 1. 簡(jiǎn)介 橋接模式(Bridge)將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。其實(shí)就是函數(shù)的封裝,比如要對(duì)某個(gè)DOM元素添加color和backgroundColor,可以封裝個(gè)changeColor函數(shù),這樣可以在多個(gè)...

    chemzqm 評(píng)論0 收藏0
  • JS或Jquery

    摘要:大潮來(lái)襲前端開(kāi)發(fā)能做些什么去年谷歌和火狐針對(duì)提出了的標(biāo)準(zhǔn),顧名思義,即的體驗(yàn)方式,我們可以戴著頭顯享受沉浸式的網(wǎng)頁(yè),新的標(biāo)準(zhǔn)讓我們可以使用語(yǔ)言來(lái)開(kāi)發(fā)。 VR 大潮來(lái)襲 --- 前端開(kāi)發(fā)能做些什么 去年谷歌和火狐針對(duì) WebVR 提出了 WebVR API 的標(biāo)準(zhǔn),顧名思義,WebVR 即 web + VR 的體驗(yàn)方式,我們可以戴著頭顯享受沉浸式的網(wǎng)頁(yè),新的 API 標(biāo)準(zhǔn)讓我們可以使用 ...

    CatalpaFlat 評(píng)論0 收藏0
  • JS 工廠模式

    摘要:工廠模式定義一個(gè)用于創(chuàng)建對(duì)象的接口,這個(gè)接口由子類決定實(shí)例化哪一個(gè)類。實(shí)現(xiàn)一個(gè)簡(jiǎn)單的實(shí)現(xiàn),使用如果使用對(duì)象屬性來(lái)實(shí)現(xiàn)以下例子中的工廠方法接受在運(yùn)行時(shí)以字符串形式指定的類型,然后創(chuàng)建并返回所請(qǐng)求類型的對(duì)象。 1. 簡(jiǎn)介 工廠模式的目的是為了創(chuàng)建對(duì)象,它通常在類或者類的靜態(tài)方法中實(shí)現(xiàn),具有以下目標(biāo): 當(dāng)創(chuàng)建相似對(duì)象時(shí)執(zhí)行重復(fù)操作 當(dāng)編譯時(shí)不知道具體類型的情況下,為工廠客戶提供一個(gè)創(chuàng)建對(duì)象...

    zhangke3016 評(píng)論0 收藏0
  • JS 狀態(tài)模式

    摘要:簡(jiǎn)介狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變它的行為,對(duì)象看起來(lái)似乎修改了它的類。狀態(tài)通常為一個(gè)或多個(gè)枚舉常量的表示。簡(jiǎn)而言之,當(dāng)遇到很多同級(jí)或者的時(shí)候,可以使用狀態(tài)模式來(lái)進(jìn)行簡(jiǎn)化。 1. 簡(jiǎn)介 狀態(tài)模式(State)允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變它的行為,對(duì)象看起來(lái)似乎修改了它的類。其實(shí)就是用一個(gè)對(duì)象或者數(shù)組記錄一組狀態(tài),每個(gè)狀態(tài)對(duì)應(yīng)一個(gè)實(shí)現(xiàn),實(shí)現(xiàn)的時(shí)候根據(jù)狀態(tài)挨個(gè)去運(yùn)...

    xingqiba 評(píng)論0 收藏0
  • JS 抽象工廠模式

    摘要:簡(jiǎn)介抽象工廠模式就是通過(guò)類的抽象使得業(yè)務(wù)適用于一個(gè)產(chǎn)品類簇的創(chuàng)建,而不負(fù)責(zé)某一類產(chǎn)品的實(shí)例。通過(guò)抽象工廠,就可以創(chuàng)建某個(gè)類簇的產(chǎn)品,并且也可以通過(guò)來(lái)檢查產(chǎn)品的類別,也具備該類簇所必備的方法。 0. 簡(jiǎn)介 抽象工廠模式(Abstract Factory)就是通過(guò)類的抽象使得業(yè)務(wù)適用于一個(gè)產(chǎn)品類簇的創(chuàng)建,而不負(fù)責(zé)某一類產(chǎn)品的實(shí)例。 JS中是沒(méi)有直接的抽象類的,abstract是個(gè)保留字,但...

    RiverLi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<