【发布时间】:2012-10-17 07:36:38
【问题描述】:
我正在为 HTML5 文件(阅读器)API 构建一个包装器,并回退到正常的文件输入或 swfupload。
我有一个通用函数“上传者”和三个子函数(都在同一范围内)
function Uploader() { }
function UploaderAPI() { }
function UploaderSWF() { }
function UploaderHTML() { }
这个想法是您创建一个var uploader = new Uploader(),并且该函数会根据功能支持/配置调用其中一个子函数。
但是,我想知道是否有办法阻止用户直接调用其中一个子函数,而是让它们仅对 Uploader() 可用。
在不将它们移动到 Uploader 范围的情况下是否可行?
【问题讨论】:
-
@Aadit - 是的,你有 - 你可能会调用 Uploader 一些不同的东西,但本质上你正在将私有函数移动到公共函数中,公共函数是 Uploader。您可以将其包装在其他东西中并更改名称,但它是相同的解决方案。
-
@Aadit - 我明白你做了什么,但你仍然创建了一个函数并将你的私有函数放入其中。只有该函数中的代码才能访问私有函数。然后,您通过将此代码放入另一个私有函数以创建闭包并返回 this,从而不必要地增加了一些额外的复杂性,但这只是将代码更深入地移动到原始 Uploader 范围内。
-
@Aadit - 我并不是说你的代码不好 - 这可能是我会做的。我只是说它确实将私有函数移动到了最初被认为是 Uploader 范围内。复杂性是“不必要的”,因为它不会改变这一事实。归根结底,如果您的论点是这些函数不在 Uploader 的范围内,也不在更“全局”的范围内,那么 Uploader 是如何调用它们的呢? “原始上传器范围”是指原始全局函数 - 这是 OP 在询问原始问题时所指的范围。
-
好的 - 问题是关于范围,而不是性能。您可以通过在公共函数中内联私有函数来使其更快。但这与问题无关。
-
您只是选择将 Uploader 称为其他名称。这是语义。问题中的 Uploader 是全局函数,您的私有函数在此范围内。您可以轻松地将 Uploader 重命名为 Downloader,然后这些功能不再在 Uploader 范围内。无论如何 - 很高兴在这一点上不同意。
标签: javascript oop unobtrusive-javascript