严格来讲,JavaScript 中没有私有成员的概念;所有对象属性都是公有的。不过,倒是有一个私有变量的概念。任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。

私有变量包括:

  • 函数的参数
  • 局部变量
  • 函数内部定义的其他函数

静态私有变量

通过在私有作用域中定义私有变量或函数,同样也可以创建特权方法,其基本模式如下所示:

  1. (function(){
  2. //私有变量和私有函数
  3. var privateVariable = 10;
  4. function privateFunction(){
  5. return false;
  6. }
  7. //构造函数
  8. MyObject = function(){ };
  9. //公有/特权方法
  10. MyObject.prototype.publicMethod = function(){
  11. privateVariable++;
  12. return privateFunction();
  13. };
  14. })();

模块模式:

前面的模式(静态私有变量)是用于为自定义类型创建私有变量和特权方法的。 而道格拉斯所说的模块模式(module pattern)则是为单例创建私有变量和特权方法。 所谓单例(singleton),指的就是只有一个实例的对象。按照惯例,JavaScript 是以对象字面量的方式来创建单例对象的。

JavaScript 是以对象字面量的方式来创建单例对象的

  1. var singleton = {
  2. name : value,
  3. method : function () {
  4. //这里是方法的代码
  5. }
  6. };

模块模式通过为单例添加私有变量和特权方法能够使其得到增强,其语法形式如下:

  1. var singleton = function(){
  2. //私有变量和私有函数
  3. var privateVariable = 10;
  4. function privateFunction(){
  5. return false;
  6. }
  7. //特权/公有方法和属性
  8. return {
  9. publicProperty: true,
  10. publicMethod : function(){
  11. privateVariable++;
  12. return privateFunction();
  13. }
  14. };
  15. }();

增强的模块模式:

作为了解知识: 红宝书第七章第四节