欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript組合模式學(xué)習(xí)要點(diǎn)

 更新時(shí)間:2016年08月26日 14:17:41   投稿:mrr  
組合模式大概是設(shè)計(jì)模式里面使用最為廣泛的模式之一了,模式本身理解起來也比較簡單,以至于可以毫不費(fèi)力的寫出一個(gè)能用的組合模式偽代碼

組合模式:將一組對象組合成樹形結(jié)構(gòu),并統(tǒng)一對待組合對象和葉對象,忽略它們之間的不同(因?yàn)槿~對象也可以也可以包含葉對象而成為組合對象),組合模式中的對象只能是一對多的關(guān)系,不能出現(xiàn)多對一。

基本單元:一個(gè)組合對象包含多個(gè)葉對象。每個(gè)基本單元又可以是別的組合對象的葉對象類似文件夾與它里面的內(nèi)容的關(guān)系網(wǎng),一個(gè)文件夾或文件又可以是其它文件夾的內(nèi)容,但一個(gè)文件夾或文件不能同時(shí)屬于多個(gè)上級文件夾。

在JavaScript中實(shí)現(xiàn)組合模式時(shí),要保證組合對象和葉對象擁有相同的接口方法,對同一組葉對象的操作必須具有一致性。

例子:

//定義組合對象
var Folder = function (name) {
this.name = name;
this.parent = null;
this.files = [];
};
Folder.prototype.add = function (file) {
file.parent = this;
if(this.files.indexOf(file) === -1){
this.files.push(file);
}else{
console.log('\''+file.name+'\'已存在,添加失敗');
}
};
Folder.prototype.scan = function () {
if(this.parent){
console.log('開始掃描\''+this.parent.name+'\': '+this.name);
}else{
console.log('開始掃描根目錄: '+this.name);
}
//關(guān)鍵在這里,調(diào)用所有它的葉對象的接口方法scan()
for(var i = 0, file; file = this.files[i++];){
file.scan();
}
};
Folder.prototype.remove = function (file) {
var n = this.files.indexOf(file);
if(n === -1){console.log('無法刪除: \''+file.name+'\'不存在:');}
if(n >= 0){
this.files.splice(n,1);
console.log('成功刪除:'+file.name);
}
};
//定義葉對象
var File = function (name) {
this.name = name;
this.parent = null;
};
File.prototype.add = function () {
console.log('不能添加在文件下面');
};
File.prototype.scan = function () {
console.log(this.parent.name+': '+this.name);
};
File.prototype.remove = function (file) {
console.log('無法刪除: \''+file.name+'\'不存在:');
};
//測試
var folder = new Folder('目錄');
var folder1 = new Folder('學(xué)習(xí)質(zhì)料');
var folder2 = new Folder('javascript');
var file1 = new File('Node.js');
var file2 = new File('qq.jpg');
folder.add(folder1);
folder.add(folder1);
folder.add(folder2);
folder1.add(file1);
folder2.add(file2);
//'學(xué)習(xí)質(zhì)料'添加成功
//'學(xué)習(xí)質(zhì)料'已存在,添加失敗
//'javascript'添加成功
//'Node.js'添加成功
//'qq.jpg'添加成功
folder.remove(folder1);
folder.remove(folder1);
file1.remove(file1);
//成功刪除:學(xué)習(xí)質(zhì)料
//無法刪除: '學(xué)習(xí)質(zhì)料'不存在:
//無法刪除: 'Node.js'不存在:
folder.scan(); //這里相當(dāng)于執(zhí)行了一個(gè)宏命令
//開始掃描根目錄: 目錄
//開始掃描'目錄': javascript
//javascript: qq.jpg

以上所述是小編給大家介紹的JavaScript組合模式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • JavaScript深入V8引擎以及編寫優(yōu)化代碼的5個(gè)技巧

    JavaScript深入V8引擎以及編寫優(yōu)化代碼的5個(gè)技巧

    這篇文章主要介紹了JavaScript深入V8引擎以及編寫優(yōu)化代碼的5個(gè)技巧,JavaScript引擎是執(zhí)行 JavaScript 代碼的程序或解釋器。JavaScript引擎可以實(shí)現(xiàn)為標(biāo)準(zhǔn)解釋器,或者以某種形式將JavaScript編譯為字節(jié)碼的即時(shí)編譯器。,需要的朋友可以參考下
    2019-06-06
  • js實(shí)現(xiàn)右下角提示框的方法

    js實(shí)現(xiàn)右下角提示框的方法

    這篇文章主要介紹了js實(shí)現(xiàn)右下角提示框的方法,實(shí)例分析了Jquery插件popup.js的具體用法,需要的朋友可以參考下
    2015-02-02
  • Bootstrap modal使用及點(diǎn)擊外部不消失的解決方法

    Bootstrap modal使用及點(diǎn)擊外部不消失的解決方法

    這篇文章主要為大家詳細(xì)介紹了Bootstrap modal使用及點(diǎn)擊外部不消失的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • localStorage過期時(shí)間設(shè)置的幾種方法

    localStorage過期時(shí)間設(shè)置的幾種方法

    聊到localStorage想必熟悉前端的朋友都不會陌生,在實(shí)際的應(yīng)用場景中,我們往往需要讓localStorage設(shè)置的某個(gè)key能在指定時(shí)間內(nèi)自動失效,所以基于這種場景,我們?nèi)绾稳ソ鉀Q呢,本文就詳細(xì)的介紹一下
    2021-12-12
  • 圖像替換新技術(shù) 狀態(tài)域方法

    圖像替換新技術(shù) 狀態(tài)域方法

    熟悉css的開發(fā)者一定知道圖像替換技術(shù),也深知它的意義,Dave Shea 曾在他的一篇文章對此做了詳細(xì)的總結(jié)
    2010-01-01
  • js、jquery圖片動畫、動態(tài)切換示例代碼

    js、jquery圖片動畫、動態(tài)切換示例代碼

    這篇文章主要介紹了通過js、jquery實(shí)現(xiàn)的圖片動畫、圖片動態(tài)切換 ,需要的朋友可以參考下
    2014-06-06
  • js+css實(shí)現(xiàn)打字效果

    js+css實(shí)現(xiàn)打字效果

    這篇文章主要為大家詳細(xì)介紹了js+css打字效果的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 微信小程序-詳解數(shù)據(jù)緩存

    微信小程序-詳解數(shù)據(jù)緩存

    每個(gè)微信小程序都可以有自己的本地緩存,本篇文章主要介紹了微信小程序-詳解數(shù)據(jù)緩存,可以通過函數(shù)可以對本地緩存進(jìn)行設(shè)置、獲取和清理,有興趣的可以了解一下。
    2016-11-11
  • JavaScript小技巧 2.5 則

    JavaScript小技巧 2.5 則

    在上一篇文章中的(偽)Lambda模塊中使用了幾個(gè)小技巧,現(xiàn)在我就把這幾個(gè)小技巧介紹一下
    2010-09-09
  • ie8本地圖片上傳預(yù)覽示例代碼

    ie8本地圖片上傳預(yù)覽示例代碼

    ie8本地圖片上傳預(yù)覽出現(xiàn)問題是因?yàn)橄拗茷g覽器造訪本地文件,所以用到濾鏡和div,下面有個(gè)不錯(cuò)的示例,希望對大家有所幫助
    2014-01-01

最新評論