亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

深入理解JavaScript系列(47):對象創建模式(上篇)

2019-11-20 13:01:19
字體:
來源:轉載
供稿:網友

介紹

本篇主要是介紹創建對象方面的模式,利用各種技巧可以極大地避免了錯誤或者可以編寫出非常精簡的代碼。

模式1:命名空間(namespace)

命名空間可以減少全局命名所需的數量,避免命名沖突或過度。一般我們在進行對象層級定義的時候,經常是這樣的:

復制代碼 代碼如下:

var app = app || {};
app.moduleA = app.moduleA || {};
app.moduleA.subModule = app.moduleA.subModule || {};
app.moduleA.subModule.MethodA = function () {
    console.log("print A");
};
app.moduleA.subModule.MethodB = function () {
    console.log("print B");
};

如果層級很多的話,那就要一直這樣繼續下去,很是混亂。namespace模式就是為了解決這個問題而存在的,我們看代碼:
復制代碼 代碼如下:

// 不安全,可能會覆蓋已有的MYAPP對象
var MYAPP = {};
// 還好
if (typeof MYAPP === "undefined") {
    var MYAPP = {};
}
// 更簡潔的方式
var MYAPP = MYAPP || {};

//定義通用方法
MYAPP.namespace = function (ns_string) {
    var parts = ns_string.split('.'),
        parent = MYAPP,
        i;

    // 默認如果第一個節點是MYAPP的話,就忽略掉,比如MYAPP.ModuleA
    if (parts[0] === "MYAPP") {
        parts = parts.slice(1);
    }

    for (i = 0; i < parts.length; i += 1) {
        // 如果屬性不存在,就創建
        if (typeof parent[parts[i]] === "undefined") {
            parent[parts[i]] = {};
        }
        parent = parent[parts[i]];
    }
    return parent;
};


調用代碼,非常簡單:
復制代碼 代碼如下:

// 通過namespace以后,可以將返回值賦給一個局部變量
var module2 = MYAPP.namespace('MYAPP.modules.module2');
console.log(module2 === MYAPP.modules.module2); // true

// 跳過MYAPP
MYAPP.namespace('modules.module51');

// 非常長的名字
MYAPP.namespace('once.upon.a.time.there.was.this.long.nested.property');

模式2:定義依賴

有時候你的一個模塊或者函數可能要引用第三方的一些模塊或者工具,這時候最好將這些依賴模塊在剛開始的時候就定義好,以便以后可以很方便地替換掉。

復制代碼 代碼如下:

var myFunction = function () {
    // 依賴模塊
    var event = YAHOO.util.Event,
        dom = YAHOO.util.dom;

    // 其它函數后面的代碼里使用局部變量event和dom
};

模式3:私有屬性和私有方法

JavaScript本書不提供特定的語法來支持私有屬性和私有方法,但是我們可以通過閉包來實現,代碼如下:

復制代碼 代碼如下:

function Gadget() {
    // 私有對象
    var name = 'iPod';
    // 公有函數
    this.getName = function () {
        return name;
    };
}
var toy = new Gadget();

// name未定義,是私有的
console.log(toy.name); // undefined

// 公有方法訪問name
console.log(toy.getName()); // "iPod"

var myobj; // 通過自執行函數給myobj賦值
(function () {
    // 自由對象
    var name = "my, oh my";

    // 實現了公有部分,所以沒有var
    myobj = {
        // 授權方法
        getName: function () {
            return name;
        }
    };
} ());

模式4:Revelation模式

也是關于隱藏私有方法的模式,和《深入理解JavaScript系列(3):全面解析Module模式》里的Module模式有點類似,但是不是return的方式,而是在外部先聲明一個變量,然后在內部給變量賦值公有方法。代碼如下:

復制代碼 代碼如下:

var myarray;

(function () {
    var astr = "[object Array]",
        toString = Object.prototype.toString;

    function isArray(a) {
        return toString.call(a) === astr;
    }

    function indexOf(haystack, needle) {
        var i = 0,
            max = haystack.length;
        for (; i < max; i += 1) {
            if (haystack[i] === needle) {
                return i;
            }
        }
        return -1;
    }

    //通過賦值的方式,將上面所有的細節都隱藏了
    myarray = {
        isArray: isArray,
        indexOf: indexOf,
        inArray: indexOf
    };
} ());

//測試代碼
console.log(myarray.isArray([1, 2])); // true
console.log(myarray.isArray({ 0: 1 })); // false
console.log(myarray.indexOf(["a", "b", "z"], "z")); // 2
console.log(myarray.inArray(["a", "b", "z"], "z")); // 2

myarray.indexOf = null;
console.log(myarray.inArray(["a", "b", "z"], "z")); // 2

模式5:鏈模式

鏈模式可以你連續可以調用一個對象的方法,比如obj.add(1).remove(2).delete(4).add(2)這樣的形式,其實現思路非常簡單,就是將this原樣返回。代碼如下:

復制代碼 代碼如下:

var obj = {
    value: 1,
    increment: function () {
        this.value += 1;
        return this;
    },
    add: function (v) {
        this.value += v;
        return this;
    },
    shout: function () {
        console.log(this.value);
    }
};

// 鏈方法調用
obj.increment().add(3).shout(); // 5

// 也可以單獨一個一個調用
obj.increment();
obj.add(3);
obj.shout();


總結

本篇是對象創建模式的上篇,敬請期待明天的下篇。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情欧美狂野欧美精品| 欧美一级大片在线免费观看| 国产精品1区2区在线观看| 精品久久久久久久久中文字幕| 国产精品99久久久久久人| 亚洲第一天堂无码专区| 欧美成人精品h版在线观看| 欧美激情xxxxx| 日韩电影中文 亚洲精品乱码| 国产精品成人播放| 欧美色视频日本高清在线观看| 性色av一区二区三区免费| 国产欧美日韩91| 国产精品一二三在线| 久久精品国产96久久久香蕉| 日韩欧美国产中文字幕| 国产精品免费看久久久香蕉| 精品无码久久久久久国产| 国产精品海角社区在线观看| 在线视频欧美性高潮| 久久亚洲春色中文字幕| 国产裸体写真av一区二区| 色悠悠国产精品| 色播久久人人爽人人爽人人片视av| 色偷偷噜噜噜亚洲男人的天堂| 欧美孕妇与黑人孕交| 欧美激情欧美激情| 欧美激情视频免费观看| 久久综合色影院| 国产亚洲精品一区二区| 97高清免费视频| 日韩欧美有码在线| 78色国产精品| 国产精品久久久精品| 日韩美女av在线| 欧美午夜片欧美片在线观看| 国产香蕉97碰碰久久人人| 亚洲综合中文字幕68页| 久久久久成人网| 久久久久久国产精品美女| 国产精品视频区| 久久久伊人日本| 2018国产精品视频| 亚洲第一视频在线观看| www.日本久久久久com.| 欧美美女15p| 日韩美女视频在线观看| 日韩在线播放一区| 欧美性视频网站| 国产精品白丝jk喷水视频一区| 亚洲女性裸体视频| 欧美性xxxx| 7m精品福利视频导航| 全球成人中文在线| 国产精品xxx视频| 日韩国产精品亚洲а∨天堂免| 欧美超级乱淫片喷水| 136fldh精品导航福利| 国产视频在线一区二区| 国产精品电影网| 日韩在线一区二区三区免费视频| 欧美精品www| 国产91免费看片| 国产精品久久999| 91在线观看欧美日韩| 国产精品99久久久久久久久| 久久人人爽人人爽人人片亚洲| 一色桃子一区二区| 国产视频亚洲视频| 国产99久久精品一区二区 夜夜躁日日躁| 国模叶桐国产精品一区| 国产精品成人av性教育| 欧美成人亚洲成人| 欧美一级淫片aaaaaaa视频| 国产欧美日韩精品丝袜高跟鞋| 久久亚洲综合国产精品99麻豆精品福利| 欧美噜噜久久久xxx| 国产精品高清在线观看| 日本在线精品视频| 亚洲精品视频久久| 亚洲情综合五月天| 欧美在线视频播放| 午夜精品在线观看| 91在线精品播放| 97国产在线观看| 色综合色综合网色综合| 91精品国产91久久久久福利| 国产乱人伦真实精品视频| 国产成人精品999| 亚洲mm色国产网站| 黄色精品一区二区| 亚洲毛茸茸少妇高潮呻吟| 久久精品青青大伊人av| 久久久久久欧美| 欧美久久精品午夜青青大伊人| 欧美成人精品不卡视频在线观看| 国产精品视频免费观看www| 国产精品女人久久久久久| www.国产精品一二区| 亚洲最大激情中文字幕| 日韩亚洲欧美成人| 日韩精品亚洲元码| 久久亚洲精品一区| 国产成人亚洲综合91| 亚洲一区二区三区777| 91欧美日韩一区| 91免费在线视频网站| 亚洲视频自拍偷拍| 久久久久久一区二区三区| 亚洲国产精品嫩草影院久久| 97福利一区二区| 国产69久久精品成人| 欧美亚洲国产日韩2020| 亚洲精品一区二区三区婷婷月| 在线视频一区二区| 久久国产加勒比精品无码| 欧美激情在线播放| 欧美日韩免费在线观看| 亚洲黄色免费三级| 57pao国产成人免费| 日韩美女视频免费在线观看| 国产在线观看精品| 成人做爰www免费看视频网站| 亚洲最大激情中文字幕| 亚洲老头老太hd| 亚洲欧洲国产伦综合| 成人中文字幕+乱码+中文字幕| 亚洲国产精品视频在线观看| 自拍视频国产精品| 91久久久久久久| 国产精品高潮呻吟久久av黑人| 在线不卡国产精品| 在线视频欧美性高潮| 国产精品久久综合av爱欲tv| 国产在线视频不卡| 欧美性猛交xxxx乱大交蜜桃| 欧美日韩xxxxx| 国产自产女人91一区在线观看| 日韩视频在线免费观看| 91探花福利精品国产自产在线| 在线丨暗呦小u女国产精品| 亚洲第一区第一页| 久久激情五月丁香伊人| 欧美综合在线观看| 日韩欧美在线第一页| 国产欧美一区二区三区四区| 欧美性xxxx18| 最近的2019中文字幕免费一页| 少妇高潮久久77777| 综合网日日天干夜夜久久| 欧美诱惑福利视频| 国产在线精品播放| 欧美精品成人在线| 亚洲色图日韩av| 欧美猛男性生活免费| 久久久国产精品亚洲一区| 91人人爽人人爽人人精88v| 亚洲欧洲高清在线| 91精品久久久久久久久久久久久久| 精品久久久中文| 日本久久久久亚洲中字幕| 午夜精品免费视频| 亚洲午夜av久久乱码| 日韩精品免费电影|