精通javascript(看書筆記)

來源:互聯網
上載者:User

標籤:

變數的類型檢查
        //檢測類型        var str = "Hello World";        if (typeof str=="string") {//使用typeof來判斷物件類型的一個例子                    }        if (str.constructor==String) {//使用建構函式屬性來判斷對象的類型            //constructor 屬性在每個對象中都存在,並一直指向建立它的函數        }

使用constructor的另外一個例子

        function User() {        }        var me = new User();        alert(me.constructor == User);//true        var you = new me.constructor();        alert(me.constructor == you.constructor);//true

        //用一個變數類型列表嚴格檢查一個參數列表        function strict(types,args) {            if (types.length != args.length) {                throw "Invalid number of arguments. Expected " + types.length + " ,received " + args.length + "  instead.";            }            for (var i = 0; i < args.length; i++) {                if (args[i].constructor!=types[i]) {                    throw "Invalid argument type. Expected " + types[i].name + " ,received " + args[i].constructor.name + " instead.";                }            }        }        strict([String, Number, Array], ["mytest", 12, [11, 22, 33]]);

 

函數curry化

Curry化是一種通過把多個函數填充到函數體中,實現將函數轉換為一個新的經過簡化的(使之接受的參數更少)函數的技術

        function addGenerator(num) {            return function (toAdd) {                return num + toAdd;            };        }        var addFive = addGenerator(5);        alert(addFive(4) == 9);
使用特權方法的例子
        function User(name,age) {            var year = (new Date()).getFullYear() - age;            this.getYearBorn = function () {//建立一個特權方法,能夠訪問到year變數,同時自身屬於公用可訪問的                return year;            }        }        var user = new User(‘angela‘, 1989);        alert(user.getYearBorn() == 26);
動態產生方法的例子
        function User(properties) {            for (var i in properties) {                (function (which) {                    var p = i;                    which["get" + p] = function () {                        return properties[p];                    }                    which["set" + p] = function (val) {                        properties[p] = val;                    }                })(this);            }        }        var user = new User({            name: "angela",            age: 26        });        alert(user.name == null);//true   //name屬性並不存在  因為它是屬性對象的私人變數        alert(user.getname() == "angela");//true  //使用新的getname方法來獲得這個值  這個函數是動態產生的        user.setage(22);        alert(user.getage() == 22);//true
靜態方法的例子
        function User(name, age) {            this.name = name;            this.age = age;        }        var user = new User(‘angela‘,26);        User.cloneUser = function (user) {//靜態方法            return new User(user.name, user.age);//建立並返回一個新的使用者        }               var cloneUser = User.cloneUser(user);        alert(cloneUser.name);//angela

 

瀏覽器的渲染和操作順序

檢測DOM是否可用
        function domReady(f) {            if (domReady.done) {//如果已經載入完成 馬上執行函數                return f();            }            if (domReady.timer) {//如果我們已經增加了一個函數                domReady.ready.push(f);//把它加入待執行函數清單中            } else {                addEvent(window, ‘load‘, isDOMReady);//添加事件監聽            }            domReady.ready = [f];//初始化待執行函數的數組            domReady.timer = setInterval(isDOMReady, 13);//儘可能快地檢查DOM是否可用        }        function isDOMReady() {//檢查DOM是否已可操作            if (domReady.done) {//如果我們能判斷出DOM已可用,忽略                return false;            }            //檢查若干函數和元素是否可用            if (document&&document.getElementsByTagName&&document.getElementById&&document.body) {                clearInterval(domReady.timer);//如果可用則停止檢查                domReady.timer = null;                //執行正在等待的函數                for (var i = 0; i < domReady.ready.length; i++) {                    domReady.ready[i]();                }                //記錄我們在此已經完成                domReady.ready = null;                domReady.done = true;            }        }

 

XPath

Curry化是一種通過把多個函數填充到函數體中,實現將函數轉換為一個新的經過簡化的(使之接受的參數更少)函數的技術

精通javascript(看書筆記)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.