2

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

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

function Uploader() { }

function UploaderAPI() { }

function UploaderSWF() { }

function UploaderHTML() { }

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

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

在不将它们移动到 Uploader 范围的情况下是否可行?

4

1 回答 1

4

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

例如

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/

于 2012-10-17T07:39:06.587 回答