代码改变世界

Pro javascript design pattern 读书笔记之 A singleton with private members 之Using the underscore notaion

2008-10-27 09:11  wlstyle  阅读(211)  评论(0)    收藏  举报

在第三中我们讨论了几种不同的方式在类种创建私有成员。其中一个缺点就是拥有私有方法他们的内存效率很低因为这个方法的一个新的版本会在每一次实例化的时候在内存种创建一个该方法的新的版本。但是因为单一对象只是理化一次。你们使用真的私有方法无需考虑内存方面的问题。这就是说,我们可以很简单的创建冒充的私有成员。我们首先将探讨这个方法。

Using the underscore notaion(使用下划线符号)

在一个单一对象中最简单最直接创建一个表面上私有成员的方法就是使用下划线表示。这样可以让其它的开发者知道这个方法或者属性是私有的同时是在对象的内部使用的。在单一对象中使用下划线标记是一个直接的方式告诉开发者这个成员不应该直接被访问。

 

the design pattern example

 

  在这个例子中,有一个单一的对象,这个单一对象有一个公用的方法(stringToArray)。这个方法使用有三个参数一个是字符串,一个是分隔符,一个是可选的布尔值用来区别是否已经移出了空格符。整个方法使用了两个私有的方法用来做大多数的工作:_stripWhitespace

和_stripSplit。这些方法应该不能作为公用方法。因为他们不是单一对象的文档的表面的一部分而且他们也不一定会在下一次更新中用到。将这些方法设置为私有方法允许你重写内部代码而不用担心破坏其它的部分。当你稍后查看这个对象认识到_stringSplit不需要单独成为一个单独的函数。你能马上移除它。因为它是用下划线被标记为私有的。你能确定没有其它的对象直接调用这个函数。

在stringToArray方法中,this这个关键词用来在对象内部访问其它方法。这是在单一对象中用来访问其它成员的最简短和方便 的访问其它成员的方法。但是它也有一定的风险。

不是任何时候都能保证this指向GiantCorp.DataParser这个对象。比如,如果你使用一个方法作为事件监听函数。This可能指向的是window对象。这样就意味着私有的方法就不会被找到。大多数的javascript库为附加事件函数规定范围,但是它可以通过使用全名(GiantCorp.DataParser)在单一对象的内部安全的访问其它的成员。