第一章:富有表现力的JavaScript
1.1 JavaScript的灵活性
1.2 弱类型语言
1.3 函数是一等对象
1.4 对象的易变性
1.5 继承
1.6 JavaScript中的设计模式
1.7 小结
1.1 JavaScript的灵活性
JavaScript最强大的特性是其灵活性。作为JavaScript程序员,只要你愿意,可以把程序写得很简单,也可以很复杂。这种语言也支持多种不同的编程风格。你既可以采用函数式编程风格,也可以采用更复杂一点的面向对象编程风格。
1.2 弱类型语言
JavaScript中有3种原始类型:布尔型、数值型、和字符串类型。此外,还有对象类型和包含可执行代码的函数类型。最后,还有空类型(null)和为定义类型(undefined) 这两种类型。原始数据类型按值传送(递),而其他数据类型则按引用传送(递)。
toString方法可以把数值或布尔值变为字符串。
parseFloat和parseInt函数可以把字符串变成数值
双重“非”操作可以把字符串或数值变为布尔值 var bool = !!num;
1.3函数是一等对象
JavaScript中函数可以存储在变量中,可以作为参数传递给其他函数,可以作为返回值从其他函数传出,还可以运行时进行构造。
匿名函数示例:
// An anonymous function, executed immediately.
(function(){
var foo = 10;
var bar = 2;
alert(foo * bar);
})();
(function(foo , bar){
alert(foo * bar);
})(10,2);
匿名函数最有趣的用途是用来创建闭包。闭包(closure)是一个受到保护的变量空间,由内嵌函数生成。
创建类的私用(private)变量原理:
JavaScript具有函数级的作用域。这意味着定义在函数内部的变量在函数外部不能被访问。JavaScript的作用域又是词法性质的(lexically scoped)。这意味着函数运行在定义它的作用域中,而不是在调用它的作用域中。把这两个因素结合起来,就能通过把变量包裹在匿名函数中而对其加以保护。
1.4 对象的易变性
在JavaScript中可以为函数添加属性,也可以对先前定义的类和实例化的对象进行修改:
内省概念:可以在运行时检查对象所具有的属性和方法,还可以使用这种信息动态实例化类和执行其方法。
JavaScript大多用来模仿传统的面向对象特性的技术都依赖于对象的易变性和反射。
1.5 继承
JavaScript使用的是基于对象的原型示(prototypal)继承,它可以用来模仿基于类的继承。
1.6 JavaScript中的设计模式
JavaScript使用设计模式主要有如下原因:
1) 可维护性。有助于减低模块间的耦合程度。
2) 沟通。为处理不同类型的对象提供了一套通用的术语。
3) 性能。提高程序的运行速度,减少需要传送到客户端的代码量。最重要的例子是享元模式和代理模式。