防止直接调用函数

时间:2012-10-17 07:36:38

标签: javascript oop unobtrusive-javascript

我正在为HTML5文件(Reader)API构建一个包装器,并回退到普通文件输入或swfupload。

我有一个通用功能“Uploader”和三个子功能(都在同一范围内)

function Uploader() { }

function UploaderAPI() { }

function UploaderSWF() { }

function UploaderHTML() { }

这个想法是你创建一个var uploader = new Uploader(),该函数根据功能支持/配置调用其中一个子功能。

但是,我想知道是否有办法阻止用户直接调用其中一个子功能,而是让它们只能用于Uploader()。

如果不将它们移动到Uploader范围,这是否可行?

1 个答案:

答案 0 :(得分:4)

您可以使用module pattern并将这些函数定义为私有方法(通过闭包),但这会将您的函数移到另一个范围内。

e.g。

var Uploader = function() {

   var UploaderAPI = function() { alert('uploaderAPI'); };

   var UploaderSWF = function() { alert('uploaderSWF');  };

   var UploaderHTML = function() {  alert('uploaderHTML'); };

   return {

      /* expose public methods here */

      publicMethodAPI : function() {
          alert('public uploaderAPI');
          UploaderAPI();
      }
   };
};

这样做你可以选择将一些公共方法与实例一起使用并在其中使用这些函数,但不要直接调用它们,例如。

var myupl = new Uploader();
myupl.publicMethodAPI();

示例(工作)小提琴:http://jsfiddle.net/ndQFB/