javascript璁捐妯″紡銆愯瀵熻呮ā寮忋

7鏈 22nd, 2010

棣栧厛璇翠笅鏍囬锛屽彲鑳芥湁鐐瑰敩浜猴紝鎵浠ョ畝鍗曠殑瑙i噴涓涓嬶紝鎴戞槸涓轰簡甯姪鑷繁鐞嗚В鎵嶅啓鐨勮繖绡囨枃绔犮

涓汉璁や负瑙傚療鑰呮ā寮忕被浼间簨浠剁洃鍚櫒锛岀粰浠讳綍涓涓綘鎰熷叴瓒g殑鍦版柟澧炲姞涓涓闃呯偣锛岀劧鍚庡湪闇瑕佺殑鏃跺欒Е鍙戝畠銆

杩樻槸鏈夌偣杩风硦锛岀湅浠g爜鍚с

鎴戜滑鍒涘缓涓涓瀵熻呯被锛

function publisher(){
this.subscribers=[];
}

杩欎釜鏋勯犲櫒閲屾湁涓涓猻ubscribers鏁扮粍锛岀敤鏉ヤ繚瀛樿闃呰呭垪琛ㄣ

澧炲姞鎶曢掓柟娉曪細

publisher.prototype.deliver=function(data){
this.subscribers.forEach(function(fn){fn(data);})
return this;
}

閲岄潰鐢ㄥ埌浜唂orEach杩欎釜js1.6鐨勬暟缁勬柟娉曪紝array.forEach(fn)->鍙傛暟鏄釜鍑芥暟锛岃繖涓嚱鏁扮殑鍙傛暟浼氭妸杩欎釜鏁扮粍鐨勬瘡涓奸兘甯﹀叆杩欎釜鍑芥暟涓綋鍙傛暟鎵ц涓娆°

涓嬮潰鏄鍔犺闃呮柟娉曪細

Function.prototype.subscriber=function(publisher){
var that=this;
var alreadyExists=publisher.subcribers.some(function(el){return el===that;});
if(!alreadyExists) publisher.subscribers.push(this);
return this;
}

瑙i噴涓涓嬶紝杩欓噷鐨剆ome涔熸槸js1.6閲岀殑涓涓暟缁勬柟娉曪紝浠ヤ竴涓洖璋冨嚱鏁颁负鍙傛暟锛岃繖涓柟娉曚細渚濇璁块棶鏁扮粍姣忎釜鍏冪礌锛岀劧鍚庡苟鎶婅繖涓厓绱犲綋浣滃弬鏁拌繑鍥炵粰杩欎釜鍥炶皟鍑芥暟锛屽鏋滆嚦灏戞湁涓娆″洖璋冨嚱鏁扮殑杩斿洖鍊兼槸true锛岋紙鍏跺疄灏辨槸濡傛灉鏈変竴涓洖璋冨嚱鏁拌繑鍥炰簡true锛夊垯some杩斿洖true锛涘惁鍒欒繑鍥瀎alse銆

閫璁㈡柟娉曞氨涓嶅啓浜嗭紝鍏跺疄灏辨槸鍦╯ubscribers鏁扮粍涓娴嬶紝濡傛灉鍚湁閫璁㈠嚱鏁帮紝鍒欐竻绌哄畠銆

OK銆

鐜板湪鐞嗘竻涓涓嬫濊矾銆俻ublisher鍜屾垜浠兘鍋氫簡浠涔堛

publisher绫伙紝鍐呴儴鏈変竴涓暟缁勶紝鍌ㄥ瓨璁㈤槄娓呭崟銆

澶栭儴鏂规硶deliver(data)锛屼綔涓哄鍔犺闃呰呬篃灏辨槸鎶曢掕闃呯殑鎺ュ彛锛屽弬鏁癲ata涓哄洖璋冨弬鏁般

鐒跺悗缁檉unction鍘熷瀷澧炲姞浜嗕竴涓猻ubscriber鏂规硶锛岀敤閫旀槸缁欒繖涓猣unction娣诲姞鍒皃ublisher.subscribers杩欎釜鏁扮粍涓嬨

OK銆傚埌杩欓噷浼拌灏辩湡鐩稿ぇ鐧戒簡銆

鎴戜滑鍏跺疄灏辨槸缁欐瘡涓嚱鏁板鍔犱簡涓涓線涓涓叏灞鏁扮粍涓璸ush鐨勬柟娉曪紝鐒跺悗闇瑕佽Е鍙戣繖涓嚱鏁扮殑鏃跺欙紝灏卞惊鐜繖涓暟缁勶紝閬囧埌娉ㄥ唽杩囩殑杩欎釜鍑芥暟锛屽氨绔嬪埢瑙﹀彂銆

璁捐妯″紡涔︿笂鐨勪緥瀛愭槸缁欎竴涓猻uperman鍒涘缓涓涓捣椋炵殑璁㈤槄锛屼竴涓琛屼腑鐨勮闃咃紝涓涓檷钀界殑璁㈤槄銆傚叾瀹炴垜浠彲浠ョ粰浠讳綍涓滆タ澧炲姞璁㈤槄锛屼篃灏辨槸鐩戝惉锛岀洃鍚垜浠劅鍏磋叮鐨勬椂鍒伙紝鐒跺悗瑙﹀彂鍥炶皟鍑芥暟鍗冲彲銆

鏈潵杩樻兂鍐欏啓鑷畾涔変簨浠讹紝浣嗘槸纭疄鎯充笉鍑哄鏄撶殑渚嬪瓙鏉ワ紝浠ュ悗鍐嶈鍚э紝浣嗘槸閬撶悊鍏跺疄閮芥槸涓鏍风殑銆

Tags: ,

Leave a Reply