5

我在 EaselJS 库的示例中看到了这段代码 - 它的作用是将整个 createjs 库的命名空间分配给“窗口”。

<script>
var createjs = window;
</script>

我的问题是:将库的名称空间设置为窗口是一个非常愚蠢的想法吗?通过使所有命名空间变量突然全局作用域,它不是摆脱了使用命名空间的全部意义吗?

我能看到的唯一优势是让您为您的对象编写更短的构造函数。例如键入:

 stage = new Stage(canvas);

代替:

 stage = new  createjs.Stage(canvas);

这是一个坏主意,还是有点聪明,或者只是无害的古怪?

4

3 回答 3

5

以这种方式设置的原因是为了保持与未命名空间的先前版本的向后兼容性。这允许开发人员在添加时升级到最新版本,而无需重构所有代码。

于 2012-10-05T19:45:05.700 回答
2

对我来说,一个好主意应该被很多人积极使用。这正是我认为这个技巧是个坏主意的原因:简而言之,它实际上违背了命名空间的想法:如果很多人(= 其他流行 JS 库的作者)开始使用window命名空间作为他们的命名空间根,方法覆盖的危害方法覆盖另一种方法将否定这种方法的任何可能的优点。

于 2012-10-04T00:55:30.830 回答
1

其实这取决于。如果您使用多个 JS 库,您可能会避免使用 Namespace to Window 来娱乐所有库。

但是,如果您为您的游戏/应用程序使用单个库 (CreateJS),您可能会考虑使用 Namespace to Window 来节省大量用于反复编写自定义命名空间名称的时间。在使用 CreateJS 构建游戏时,我发现它是一种方便的方法。

于 2013-01-09T14:51:54.180 回答