参考:http://blog.chinaunix.net/uid-26672038-id-4364155.html
装饰者模式特点:【看书】
1. 不修改原对象的原本结构来进行功能添加。
2. 装饰对象和原对象具有相同的接口,可以使客户以与原对象相同的方式使用装饰对象。
3. 装饰对象中包含原对象的引用,即装饰对象为真正的原对象在此包装的对象。
装饰函数:这个 还是 比较有用的,比如我们想给 window 绑定 onload 事件,但是 又不确定 这个事件是不是已经被其他人绑定过,为了避免 覆盖 掉之前的 window.onload 函数 的行为,
我们一般都会先保存好原先的window.onload,把他放入新的 window.onload 里执行:
window.onload = function(){ alert(1) } var _onload = window.onload || function(){}; window.onload = function(){ _onload(); alert(1); }
实践案例:在给 浙里办项目【该项目使用jQuery开发】中 修改引入的 JS-SDK 版本【JS_SDK.js发布在CDN上】时,因为 新版 JS-SDK 中 使用了 window.onload, 而 项目中的 js也使用了window.onload。
结果导致JS_SDK中的 window.onload 被覆盖,失去效用。当时 没有 想到 用 装饰者模式 可以解决这个问题,是通过 jQuery 的 onload 方法去解决的【jQuery的onload是可以多次绑定 事件函数的】。