众所周知,javascript 是没有块级作用域的概念的。很多刚学习 javascript 的小伙伴们常常为此而陷入困惑。不过好在 ES6 为 javascript 解决了这个问题。ES6 为 javascript 新增 2 种变量声明的方式 let 和 const 。 阅读全文
一个类或对象中往往会包含别的对象。在创建这种成员对象时,你可能习惯于使用常规方式,也即用 new 关键字和类构造函数。问题在于这会导致相关的两个类之间产生依赖性。我们讲述一种有助于消除这两个类之间的依赖性的模式,它使用一个方法来决定究竟要实例化那个具体的类。我们既要讨论简单工厂模式,也要讨论更复杂的工厂模式。前者另外使用一个类(通常是一个单体)来生成实例,而后者则使用子类来决定一个成员变量应该是哪个具体的类的实例。 阅读全文
单体 (singleton) 模式是 JavaScript 中最基本但又最有用的模式之一,它可能比其他任何模式都更常用。这种模式提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码可以通过单一的变量进行访问。通过确保单体对象只存在一份实例,你就可以确信自己的所有代码使用的都是同样的全局资源。单体类在 JavaScript 中有许多用途。它们可以用来划分命名空间,以减少网页中全局变量的数目。它们还可以在一种名为分支 (branching) 的技术中用来封装浏览器之间的差异(借助分支技术,你在使用各种常用的工具函数时就不必再操心浏览器嗅探的事)。更重要的是,借助于单体模式,你可以把代码组织得更为一致,从而使其更容易阅读和维护。这种模式在 JavaScript 中非常重要,也许比在其他任何语言中都更重要。在网页上使用全局变量有很大的风险,而用单体对象创建的命名空间则是清除这些全局变量的最佳手段之一。仅此一个原因你就该掌握这种模式,更别说它还有许多别的用途。 阅读全文
在 JavaScript 中继承是一个非常复杂的话题,比其他任何面向对象的语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需要使用一个关键字即可。与它们不同,在 JavaScript 中要想达到传承公用成员的目的,需要采取一系列措施。更有甚者,JavaScript 属于使用原型式继承的少数语言之一。得益于这种语言的灵活性,你既可使用标准的基于类的继承,也可使用更微妙一些的原型式继承。 阅读全文
RequireJS 是一个 JavaScript 文件和模块加载器。它既可以在浏览器环境中使用也可以在其他 JavaScript 环境中使用,例如 Rhino 和 Node。使用模块化脚本加载器如 RequireJS 将提升你们代码的执行速度和质量。RequireJS 兼容 IE6+,Firefox 2+,Safari 3.2+,Chrome 3+,Opera 10+ 。 阅读全文
Javascript 是现在最流行、应用最广泛的语言之一。由于所有现代浏览器都嵌入了 Javascript 解释器,所以在大多数地方都能见到其身影。作为一种语言,它在我们的日常生活中起着非常重要的作用,支持着我们访问的网站,帮助Web呈现出多姿多彩的界面。那为什么有些人还把它看作一种玩具式的语言,认为它不值得职业程序员关注呢?我们认为其原因在于,人们没有认清这种语言的全部能力及其在当今的编程世界中的独特性。Javascript 是一种极富表现力的语言,它具有一些C家族语言所罕见的特性。Javascript 允许你用各种方式完成同样的任务,还允许你在面向对象编程的过程中借用函数式编程中的概念来丰富其实现方式。 阅读全文