javascript 命名空間的執行個體應用

來源:互聯網
上載者:User

標籤:

/*** 建立全域對象MYAPP* @module MYAPP* @title MYAPP Global*/var MYAPP = MYAPP || {};/*** 返回指定的命名空間,如果命名空間不存在則建立命名空間。* 備忘:命名時需小心,注意保留關鍵字,可能在一些瀏覽器無法使用。** @method namespace* @param {String *} 至少需要建立一個命名空間* @return {Object} 最後一個命名空間建立的對象的引用*/MYAPP.namespace = function(str){    var parts = str.split("."),    parent = MYAPP,    i=0,    l=0;    if(parts[0]==="MYAPP"){        parts = parts.slice(1);    }    for(i=0,l=parts.length; i<l;i++){        if(typeof parent[parts[i]] === "undefined"){            parent[parts[i]] = {};        }        parent = parent[parts[i]];    }    return parent;}/*** bfun是Basic Functions Extended的縮寫* 作用:包括數組、字串等等數功能擴充** @module bfun*/MYAPP.bfun = {    array:(function(){        return {            /**            * @method isArray 判斷是否為數組            * @param {Array} 數組            * @return {Boolean} 真返回true,否則返回false            */            isArray: function(){                return Object.prototype.toString.call(arguments[0])  === ‘[object Array]‘;             },            /**            * @method inArray 檢查值是否在數組中            * @param {value,Array} 值,數組            * @return {Boolean} 真返回true,否則返回undefined            */            inArray: function(val,arr){                for(var i=0,l=arr.length;i<l;i++){                    if(arr[i] === val){                        return true;                    }                }            }        }    })(),    string:(function(){        return {            /**            * @method trim 過濾字串兩邊多餘的空格            * @param {String} 字串            * @return {String} 字串            */            trim: function(){                return arguments[0].replace(/(^\s*)|(\s*$)/g, "");            },            /**            * @method ltrim 過濾字串左邊多餘的空格            * @param {String} 字串            * @return {String} 字串            */            ltrim: function(){                return arguments[0].replace(/^s+/g, "");            },            /**            * @method rtrim 過濾字串右邊多餘的空格            * @param {String} 字串            * @return {String} 字串            */            rtrim: function(){                return arguments[0].replace(/s+$/g, "");            }        }    })()}// 測試MYAPP.test = {    init: function(){        // 使用對應的模組先引用        var marray = MYAPP.namespace("MYAPP.bfun.array");        var mstring = MYAPP.namespace("MYAPP.bfun.string");        var arr =  ["a","b"];        var str = "   abc  ";        console.log("判斷是否為數組:" + marray.isArray(arr));        console.log("值是否在數組中:" + marray.inArray("a",arr));        console.log("過濾左右空格:" + mstring.trim(str));    }}MYAPP.test.init();

 

寫幾個有用的函數

querySelector和querySelectorAll是W3C提供的新的查詢介面,但是名字好長,自己寫個簡單的,innerHTML 屬性也常用到,寫個簡單版仿jQuery的html方法

(function () {            var _NS = function () {                          }                     _NS.prototype.select = function (selector,context) {                var context = context || document;                return context.querySelectorAll(selector);            }            _NS.prototype.isArrayLike=function(obj){                if(obj instanceof Array){                    return true;                }                var length=obj.length;                if ( obj.nodeType === 1 && length ) {                    return true;                }                return false;            }            _NS.prototype.html = function (obj,value) {                var isArray=this.isArrayLike(obj), i=0;                if (typeof value == ‘string‘) {                    if (!isArray) {                        obj.innerHTML = value;                    } else {                        var length = obj.length;                        while (i < length) {                            obj[i].innerHTML = value;                            i += 1;                        }                    }                } else {                    if (!isArray) {                        return obj.innerHTML;                    } else {                        return obj[0].innerHTML;                    }                }            }            window.NS = new _NS();        })();

 

建構函式的一些知識

想要做到上面幾點除了prototype等基本知識,還需要瞭解一些關於JavaScript建構函式的知識。

1.什麼樣的函數是建構函式

在JavaScript的世界裡建構函式並不神秘,也不特殊,任何函數通過new 操作符調用都可以變為建構函式,不使用new 操作符就不是建構函式,而是直接按普通函數調用。

2.建構函式返回什麼樣的結果

建構函式的傳回值分為兩種情況,當function沒有return語句或者return回一個基本類型(bool,int,string,undefined,null)的時候,返回new 建立的一個匿名對象,該對象即為函數執行個體;如果function體內return一個參考型別對象(Array,Function,Object等)時,該對象會覆蓋new建立的匿名對象作為傳回值。

寫個小例子驗證一下

 

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.