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

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 16:16:02
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了深入理解JavaScript系列(47):對象創建模式(上篇),本文講解了命名空間、定義依賴、私有屬性和私有方法 、Revelation模式、鏈模式等內容,需要的朋友可以參考下
 

介紹

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

模式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
亚洲护士老师的毛茸茸最新章节| 久久久亚洲精选| 国产精品视频xxx| 91chinesevideo永久地址| 亚洲欧美视频在线| 欧美日韩亚洲91| 国产精品自产拍高潮在线观看| 日韩av电影手机在线观看| 亚洲乱码av中文一区二区| 国产精品日日做人人爱| 精品久久香蕉国产线看观看gif| 国产一区二区三区视频| 性欧美长视频免费观看不卡| 亚洲国产精品推荐| 日本久久久久久久| 欧美放荡办公室videos4k| 国内精品久久久久久久久| 欧美日本中文字幕| 成人啪啪免费看| 少妇高潮久久久久久潘金莲| 欧美日韩国产区| 欧美激情一区二区三区成人| 日韩精品中文字幕在线观看| 欧美国产日韩中文字幕在线| 亚洲精品久久久久中文字幕欢迎你| 成人h猎奇视频网站| 亚洲午夜女主播在线直播| 久久福利视频网| 欧美孕妇与黑人孕交| 亚洲精品视频免费| 欧美极品美女电影一区| 91久久久精品| 欧美性猛交xxxx乱大交| 成人在线一区二区| 中文字幕亚洲自拍| 91精品国产91久久久久久久久| 95av在线视频| 大伊人狠狠躁夜夜躁av一区| 欧美巨猛xxxx猛交黑人97人| 欧美性猛交xxxx乱大交| 国产精品香蕉在线观看| 55夜色66夜色国产精品视频| 国产精品久久久久久久久免费| 亚洲精品国产成人| 久久久久久九九九| 欧美老女人在线视频| 亚洲天堂久久av| 亚洲精品国产综合区久久久久久久| 欧美黑人狂野猛交老妇| 亚洲精品v欧美精品v日韩精品| 国产精彩精品视频| 亚洲在线第一页| 久久精品久久久久久国产 免费| 最近2019年好看中文字幕视频| 91精品国产高清久久久久久久久| 中文字幕视频在线免费欧美日韩综合在线看| 日韩精品极品视频| 日韩中文字幕视频在线观看| 精品无人区太爽高潮在线播放| 欧美国产第一页| 国产激情综合五月久久| 久久久女人电视剧免费播放下载| 亚洲成人网在线| 成人网欧美在线视频| 国产精品亚洲视频在线观看| 国产精品96久久久久久又黄又硬| 久久噜噜噜精品国产亚洲综合| 国内免费精品永久在线视频| 国产日韩av高清| 亚洲电影成人av99爱色| 美乳少妇欧美精品| 米奇精品一区二区三区在线观看| 欧美日韩激情美女| 久久成人av网站| 免费不卡欧美自拍视频| 久久久久久av| 国产成人在线播放| 亚洲第一页在线| 中文字幕欧美专区| 欧美激情免费看| 亚洲日本aⅴ片在线观看香蕉| 另类美女黄大片| 2018中文字幕一区二区三区| 亚洲国产精品视频在线观看| 欧美激情区在线播放| 国产成人精品999| 亚洲va久久久噜噜噜| 亚洲国产91色在线| 亚洲人成在线播放| 欧美另类老女人| 亚洲xxxx在线| 国产亚洲aⅴaaaaaa毛片| 日韩小视频在线观看| 91久久久亚洲精品| 久久99精品久久久久久琪琪| 亚洲自拍偷拍一区| 日韩av中文字幕在线播放| 国产欧美日韩精品丝袜高跟鞋| 57pao成人国产永久免费| 亚洲一级一级97网| 中国人与牲禽动交精品| 欧美裸体xxxx极品少妇软件| 青青精品视频播放| 国产欧美在线播放| 日韩av一区二区在线观看| 日韩精品极品在线观看| 中文日韩在线视频| 亚洲精品一区二区网址| 国产精品香蕉在线观看| 这里只有精品在线观看| 日韩中文视频免费在线观看| 欧美伊久线香蕉线新在线| 日韩在线视频观看正片免费网站| 中文字幕久久久| 国产精品香蕉在线观看| 欧美一区二区大胆人体摄影专业网站| 欧美日韩第一页| 最新国产成人av网站网址麻豆| 色老头一区二区三区| 日韩精品免费在线视频| 精品国产91久久久| 亚洲国产欧美自拍| 欧洲中文字幕国产精品| 亚洲人成电影在线| 日韩激情av在线免费观看| 两个人的视频www国产精品| 韩曰欧美视频免费观看| 国产91网红主播在线观看| 精品久久久久久久中文字幕| 欧美www在线| 国产欧美日韩精品丝袜高跟鞋| 91av在线国产| 美女久久久久久久久久久| 亚洲自拍偷拍网址| 国产精品久久一| 岛国av在线不卡| 成人黄色片在线| 亚洲大胆美女视频| 亚洲黄色www| 国产精品夜间视频香蕉| 亚洲free性xxxx护士白浆| 亚洲精品99999| 成人免费在线视频网址| 亚洲无av在线中文字幕| 成人激情在线播放| 亚洲精品国产精品国自产观看浪潮| 久久99精品久久久久久噜噜| 欧亚精品中文字幕| 亚洲免费一级电影| 北条麻妃在线一区二区| 久久久av一区| 欧美成年人视频网站欧美| 最近的2019中文字幕免费一页| 亚洲一品av免费观看| 久久久91精品国产| 久久久久久久影院| 欧美在线视频一区二区| 亚洲国产精彩中文乱码av在线播放| 久久五月天综合| 久久久久久成人| 欧美成人网在线| 日韩中文字幕在线| 国产精品自产拍在线观看中文| 91在线观看免费|