方法封装了从DOM中删除一个元素的操作,屏蔽了开发者要访问该元素父节点的需求。
从JavaScript的可维护性而言,门面是非常合适的方式,自己可以完全控制这些接口。你可以允许访问任何底层对象的属性或方法,反之亦然,也就是有效地过滤对该对象的访问。你也可以对已有的方法进行改造,使其更加简单易用(上段示例代码就是一个案例)。底层的对象无论如何改变,只要修改门面,应用程序就能继续正常工作。
门面实现一个特定接口,让一个对象看上去像另一个对象,就称作一个适配器。门面和适配器唯一的不同是前者创建新接口,后者实现已存在的接口。
11.4关于Polyfill的注解
随着 ECMAScript 5和HTML 5的特性开始在各种浏览器中的实现,JavaScript polyfills(也称为 shims)变得流行起来了。一个polyfill是指一种功能的模拟,这些功能在新版本的浏览器中已经有完备定义并原生实现了。例如,ECMAScript 5为数组增加了forEach()函数。该方法可以在ECMAScript 3中模拟,以便在老版本的浏览器中如同新版本一样使用。polyfills的关键是它们模拟的原生功能要以完全兼容的方式来实现。因此在有些浏览器中存在了这些功能,所以有必要检测不同情况下它们的处理是否符合标准的方式。为了达到目的,polyfills经常会给非自己拥有的对象新增一些方法。我不是polyfills的粉丝,不过对于别人使用它们,我表示理解。相比其他的对象修改而言,polyfills是有界限的,是相对安全的。因为原生实现中是存在这些方法并能工作的,有且仅当原生方法不存在时,polyfills才新增这些方法,并且它们和原生版本方法的行为是完全一致的。
polyfills的优点是,当只支持浏览器的原生功能时,它们非常容易删除。如果你选择使用某个polyfill,你自己做好严格审查。要保证它的功能和原生的版本尽可能的近似,多检查一下这种库代码有单元测试并严格验证了这些功能。polyfills的缺点是,它们可能没有精确地实现它们(原生浏览器环境)所缺失的功能,从而给你带来的麻烦比缺失的功能要多得多。
……
展开
——Ryan Grove,Yahoo! YUI工程师
“作者将他十多年工作经验的精华部分浓缩至这本通俗易读的书中。我建议每个开发工程师和在校学生尽早阅读本书。不管你有多少经验,本书中的每一页内容都会让你变得更加优秀且倍受大家欢迎。”
——Lea Verou,Web设计师兼Web开发人员
“ 这是一本前端工程师的指南,指明了在编码过程需要注意的方方面面。提高可维护性是一个非常大的话题,而这本书,是一个非常不错的起点。”
——王保平(玉伯),支付宝Web前端工程师