问题标签 [javascript-namespaces]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
236 浏览

javascript - 重写并添加到我的命名空间一个 javascript 库

我打开了一个名为 Jibberish ( https://github.com/mdp/gibberish-aes ) 的 javascript 项目,我试图了解它的编码风格,我只给出了它的开始和结束的一部分:

只是想知道它的用法:

我可以看到一个最外面的自执行函数在代码末尾返回一个实际上是匿名(!)的对象,并且该对象的成员是自执行函数内部定义的函数,因此,属性"size"指的是function size()定义为函数表达式:

我什至可以通过调用所有返回的函数 aspublic和其余的 as来回忆有关这种方法的私有和公共函数的所有讨论,private但有些事情让我很困惑:

  1. 为什么外部匿名函数有参数,它们将在哪里使用?

  2. 而不是使用(function(){//put my code here...}());作者(function(root, factory){//some code...}(this, function(){//main code here...}));,这是为什么呢?

  3. 在问题 (2) 上,我可以看到两个参数thisfunction(){//main code here...}作为参数传递给外部匿名函数来代替rootand factory。所以,root变成了this!但是,现在this指的是哪里?

  4. 也许我们可以更好地重写这一切?我刚刚阅读了如何在 JavaScript 中声明命名空间?我发现 Jaco Pretorius 的回答非常棒,我可以重写这个并将其添加到我的命名空间中,如下所示:

    (函数(myGibberishAES){

    //这里的主要代码...

    }(window.myGibberishAES = window.myGibberishAES || {}));

可以接受的编码标准吗?

谢谢!

0 投票
1 回答
1730 浏览

javascript - 在不使用全局变量的情况下重用 knockout.js viewModel

我有一个包含不同淘汰生成内容的页面。我有一个包含数据的右侧菜单,该菜单应在页面中间加载新数据,具体取决于右侧菜单中选择的行。

所以,我可以在页面中间获取内容。它从后端加载当前内容并显示它。但是,当我在右侧面板中选择一个项目时......我想重新获取页面中间的数据并更新页面。然而,这对我来说是一个停止点。由于内容的获取是在命名空间中完成的,并且不允许使用全局变量,因此我无法重用当前的 viewModel(或者,至少我不知道如何)。因此,我正在创建一个新的 viewModel,我无法对其应用绑定,因为在加载页面时它们已经应用于相同类型的 viewModel。

这是我的 JS 代码:

这是我的 HTML 代码:

我的问题是:如何在页面加载时重新获取数据并重新使用 viewModel。我现在完全被困住了。

0 投票
1 回答
226 浏览

javascript - How to extend the namespace when using the "Immediately invoked function expression" in Javascript?

Ive been using this way of defining a namespace

Now Id like to extend skillet to a sub namespace, like skillet.module and let module behave in the same way as skillet - protect its undefined, and allow private and public members.

Ive tried the other way of defining a namespace, inside skillet, do skillet.theObject = { blah: function() {} }; and so on but that only gives me a normal object and not private and public members in it.

0 投票
0 回答
99 浏览

javascript - 这是在 javascript 中创建命名空间的好方法吗?

我一直在阅读大量关于with在 JavaScript 中使用关键字的帖子、问题和文章。有些文章警告不要使用 Javascript 的with关键字,所以我想知道我的使用是否合适。

我的大部分编程经验都是在 C# 和 Java 中,所以在创建相关对象时为它们命名对我来说很有意义。

我正在尝试的方法是首先将根命名空间创建为可全局访问的对象。对象成员是第一级命名空间,它们也是对象。

何时将对象添加到命名空间时,我使用 Javascriptwith关键字使参数的成员在 with 的范围内可本地访问。在命名空间中移动时,嵌套withs 并将参数设置为要输入的命名空间。

这是一个例子:

0 投票
3 回答
5782 浏览

javascript - 从命名空间调用方法以在另一个 javascript 文件中使用

为了组织我的代码,我碰巧为我的主要 javascript 文件编写了命名空间。然后我想将该文件的一些函数调用到我的自定义 javascript 文件中,比如说script.js. 问题是我无法访问命名空间的方法。这是我的示例代码:

main.js

我已经尝试过如下script.js

更新:

这是链接:http: //jsnamespace.comyr.com/using-accordian.html

并且出现错误消息"ReferenceError: Accordian is not defined" 任何帮助将不胜感激。

0 投票
4 回答
1878 浏览

javascript - JavaScript Namespace & jQuery Event Handler

I have created a Javascript namespace to avoid conflict with other Javascript codes.

Please, how can I reference my enclosing namespace?

0 投票
1 回答
793 浏览

javascript - 将命名空间添加到您的 javascript

几年前我曾在 google map api 上工作过,并写了一个可重用的实用程序。那时添加 google map api 参考确实会在页面的全局命名空间中添加所有 api 类。因为这是工作样本

在 v3 中,所有 Google Maps JavaScript API 代码都存储在 google.maps.* 命名空间中,而不是全局命名空间中。作为此过程的一部分,大多数对象也已重命名,并进行了更多更改。

现在你必须编写上面的代码如下

问题

我在 Google v2 API 时代编写了一个库,并在许多项目中使用过,并且运行良好。但现在我正在开发一个新项目并使用 Google V3 API 并希望重用那个旧的 v2 库。但是添加 v3 库不会在全局命名空间中添加 API 类,并且我的库不起作用。有什么方法可以像我们在 C# 中那样将命名空间添加到我们的 JavaScript 文件中,它允许我们在不附加命名空间的情况下编写类

0 投票
2 回答
1391 浏览

javascript - 如何检查命名空间函数是否存在?

有没有办法找出命名空间中的函数是否存在?我正在尝试获取 HTML 元素的属性值,然后检查字符串值是否具有相应的 JavaScript 函数。

我知道我可以使用typeof window[callback] === 'function'来检查全局声明的函数,但这似乎不适用于命名空间中的函数;它是未定义的。

有没有办法处理这个?

谢谢 :)

0 投票
1 回答
79 浏览

javascript - 如何在两个不同的文件中使用命名空间?

我正在尝试在两个不同的文件中使用命名空间。

第一个文件:

第二个文件:

但我不断收到此错误:

Uncaught TypeError: undefined is not a function。

我究竟做错了什么?

0 投票
1 回答
35 浏览

javascript - Javascript对象到函数命名空间

我有一个像这样的对象

我想使用原型将其转换为函数名称间距。我该如何转换?我试着跟随。但不工作

任何帮助?