新手初学习javascript的闭包(closure)概念
其实,ECMScript中所谓的闭包,是指词法表示包括不必计算的变量的函数,也就是说,该函数能使用函数外定义的变量.
我们通常使用IC报价网全局变量就是一个简单的闭包实例.
但是,在一个函数中定义另一个函数会使闭包变得更复杂,如:
由此看到,闭包是ECMAScript中非常强大多用的一部分,可以用于执行复杂的计算.就像使用任何高级函数一样,在使用闭包时要当心,因为它们可能会变得非常复杂.
在javascrip定义类和对象有很多种方法,但是,对于动态原型方法定义的方式,我还是很陌生的.今天看了js高级程序设计才发现,动态原型方法的基本思想与混合的构造函数/原型方式相同,即在构造函数内定义非函数属性,而函数属性则利用原型属性定义.IC报价网唯一的区别是赋予对象方法的位置.
下面是用动态原型方法来写Car类:
直到检查typeof Car._initialized 是否等于"undefined" 之前,这个构造函数都未发生变化.这行代码是动态原型方法中最重要的部分.如果这个值未定义,构造函数将用原型方式继续定义对象的方法,然后把Car._initialized设置为true. 如果这个值定义了(它的值为true时, typeof的值为Boolean), 那么就不再创建该方法.简而言之,该方法使用标志来判断是否己给原型赋予了任何方法.该方法只创建并赋值一次,传统的OOP开发者会高兴地发现,这段代码看起来更像其他语言中的类定义了.
呵呵,动态原型方法也是很流行的,在功能上与构造函数/原型方式等价.可以采用这两种方式中的任何一种.不过,需要注意的是,不要单独使用经典的构造函数或原型方式,因为这样会给代码引入问题.(具体问题,在开发中自己发现吧^_^)