好的代碼是什么?我覺的是是:代碼結構清晰、每個功能單一、方便測試、拿來就能用、解耦。
監聽者模式前端那是天天接觸的,比如常用的click事件(第一代事件只能算回調)。
不過除此之外還是很多地方需要用到的,比如書生開源的XXY庫里面,輪播插件監聽Gap滑動值,焦點返回。這樣的話代碼結構就很清晰。比一個更接近生活的例子。
你寫了一個游戲,然后你有了別的任務,要讓別人在游戲初始化之后再添加一個新的功能,他要閱讀一遍代碼才能知道再哪里加。
完整的監聽者模式對象
// Tips 代碼這段代碼使用湯姆大叔寫的
//通用代碼
var observer = {
//訂閱
addSubscriber: function (callback) {
this.subscribers[this.subscribers.length] = callback
},
//退訂
removeSubscriber: function (callback) {
for (var i = 0; i < this.subscribers.length; i++) {
if (this.subscribers[i] === callback) {
delete (this.subscribers[i])
}
}
},
//發布
publish: function (what) {
for (var i = 0; i < this.subscribers.length; i++) {
if (typeof this.subscribers[i] === 'function') {
this.subscribers[i](what)
}
}
},
// 將對象o具有觀察者功能
make: function (o) {
for (var i in this) {
o[i] = this[i]
o.subscribers = []
}
}
}
讓我們監聽一個對象吧。
var obj = {
f: function(a){
this.publish(a)
}
}
observer .make(obj)
好了,開始訂閱AND發布
// 訂閱
obj.addSubscriber(function(e){
console.log('pusb:'+e)
})
// 發布
obj.f('一條小道消息')
OK,好了。
--END--