问题标签 [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 投票
0 回答
149 浏览

javascript - Titanium 命名空间(防止访问嵌套命名空间函数)

我的项目定义与这个项目几乎相同:https ://github.com/krawaller/Struct/tree/master/Resources

但我遇到的问题是我仍然可以在任何深度从 S 访问对象。例如,我可以访问 S.ui 表单 app.js 等等。我可以防止这种情况吗?

我尝试使用显示模块模式,但由于 Ti.include 我可以全局查看对象...

如果我在函数范围内执行 Ti.include,加载/包含的对象是否绑定到此函数范围?

关于这个问题的任何示例/示例?

0 投票
2 回答
213 浏览

jquery - jQuery 限制全局命名空间

目前,我将所有 JavaScript 函数都放在一个函数中,因此不会污染全局命名空间。

例如

现在我想使用 jQuery,所以我希望它包含在以下内容中:

我尝试将 var App = function () {} 包装在 jQuery 函数中,但是当我在 App 上设置 AJAX 属性时,这会导致问题。有任何想法吗?

0 投票
3 回答
2970 浏览

javascript - 如何在不覆盖另一个同名对象的情况下创建一个空的命名空间对象?

我一直在尽可能多地研究 Yahoo YUI 博客建议的模块模式。

我注意到 YUI 提供了创建新的空命名空间对象的能力,而无需覆盖现有的同名对象,如下所示:

YAHOO.namespace("myProject");

然后可以调用并使用YAHOO.myProject

(提醒:如果YAHOO.myProject已经存在则不会被覆盖)

如何在不使用 YUI 的情况下使用纯 javascript 实现类似的效果?

请尽可能详细地解释。

可以在此处找到完成此操作的完整 YUI 博客文章。

当我学习和加强我的 javascript 知识和技能时,我正在尝试创建自己的个人 javascript 库(即使我从不需要使用它)

0 投票
1 回答
463 浏览

javascript - Rails 3.2 中的最佳实践:将 javascript 函数附加到窗口对象?

我有一个rails 应用程序,其中很多视图都以javascript 呈现(即从远程操作呈现)。在rails将我的咖啡脚本文件编译成javascript之后,我发现,由于命名空间分离,我相信这些视图不能引用任何javascript函数,除非我将函数附加到窗口对象。例如

这就是我一直在做的事情,但是将几乎甚至函数附加到窗口对象似乎并不正确。有没有更好的方法来解决这个问题?

0 投票
2 回答
1121 浏览

javascript - 检测脚本列表何时全部加载到 javascript 中(使用命名空间)。

我为javascript制作了一个命名空间框架。我正在加载一些动态添加到 HTML 中的插件(.js 文件)。

我将尝试简化代码。

此函数用于动态加载 JS。加载 .js 文件后调用回调函数。考虑以下代码已经运行。

我有一个 init 函数,它加载 MYNAMESPACE.plugins 中包含的插件,如下所示:

在我的 HTML 中,我有以下脚本标签:

我想把它改成这样:

但我不知道如何修改函数 MYNAMESPACE.init() 以便在加载所有插件脚本后执行回调。

有任何想法吗?也许使用闭包。

0 投票
2 回答
1501 浏览

javascript - OOP,命名空间顶级方法内的私有函数

我有一个声明命名空间的 js 脚本,然后有一个调用方法run(),我可以从 XUL 脚本内部调用它,例如myNamespace.run()

我希望能够在getSelText()内部调用myNamespace.run()而无需声明getSelText()myNamespace. 相反,它应该像内部的私有方法myNamespace.run()

当我运行这个脚本时,我收到一个错误:

getSelText不是函数。

我对 JavaScript 很陌生,所以我不知道设计它的最佳方式。是否有可能实现我正在尝试的目标?我会以错误的方式解决这个问题吗?

感谢任何帮助!

0 投票
2 回答
4259 浏览

javascript - 如何跨多个文件跨越javascript命名空间?

我永远忽略了javascript。几年前我开始使用 jQuery,这样我就能过得去。但是当我开始更多地做 TDD 时,我昨天决定真正深入研究 javascript(之后可能还有 coffeescript)。

在我的 ASP.NET Web 窗体应用程序中,我有很多页面,目前这些页面中的大多数都没有大量的 javascript。我正在改变这一点。我正在使用 Jasmine 和 Chutzpah 来创建我的测试。

我的测试按预期通过和失败。但后来我想创建一个命名空间,这样我就不会在全局空间中到处乱窜了。

阅读本文后:http: //enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/

我决定尝试使用文章的自执行匿名函数:第 2 部分(公共和私有)部分中的模式。它似乎具有最大的灵活性,并且似乎很好地封装了事物。

我有一个名为 /Scripts 的文件夹。在该文件夹下是我使用的一些框架,例如 jQuery、jasmine、(twitter) bootstrap 和 modernizr。我还有一个名为 /Site 的子文件夹,我将我的站点代码放在基于页面的多个文件中。(product.js、billing.js 等)

在 /Scripts/Site 下,我向 /Tests(或 Specs)添加了一个子文件夹,其中包含文件(product_test.js、billing_tests.js 等)。

没有命名空间一切都很好。我有一个使用padLeft辅助函数创建的 utility.js 文件。然后我在另一个 .js 文件中使用了该全局 padLeft。我的测试都成功了,我很高兴。然后我决定找出命名空间并将我的 Scripts/Site/utility.js 更改为如下所示:

然后在我的 Scripts/Site/Tests/utility_test.js 我有

通过这个极其简单的测试,我期待 myns.something 以字符串值“something”返回。

它没有。它回来了undefined

那么,如何跨多个文件使用 javascript 命名空间?

很抱歉介绍了这么长,但我认为这可能有助于解释我这样做的原因。我也提出了所有这些,因为我愿意听取有关此设置如何完全错误或部分错误或其他任何想法的想法。

感谢您花时间阅读这个问题。

更新:已解决 谢谢大家的帮助。最大的帮助来自评论者@TJ Crowder。我不知道 jsbin 工具的存在,在确信我将上面的代码放入工具中并且结果正确之后,我知道我的环境中必须有一些东西。

已接受答案中的链接也对我有很大帮助。在看到语法和逻辑是一致的并且可以正常工作后,我只需要确定我的设置有什么问题。我很尴尬地说是我传入了 jQuery,但是在我试图让它工作的测试工具中,我实际上并没有使用 jQuery。这意味着该模块实际上并没有被加载 - 所以 myns 从未设置过。

感谢大家。希望这可能对将来的某人有所帮助。如果您使用上述方法,请确保包含 jQuery 对象。另一个选项是不传入 jQuery 并从参数列表中删除 $。

0 投票
1 回答
1597 浏览

javascript - 从另一个 .js 文件调用一个 .js 文件中的函数时的命名空间问题

为了为许多图像制作可滑动的幻灯片,我试图将两个插件Swipe.jslazyloader.js拼接在一起。我想让 Swipe 插件中的幻灯片计时器事件调用 Lazyloader 内部的更新函数。从研究来看,我的问题似乎是 namespace 之一;也就是说,Swipe 不知道 Lazyloader 内部的东西,因此无法调用该函数。

  1. 鉴于以下代码,我是否正确理解我的问题?
  2. 如果是这样,我怎样才能让 Swipe 访问 Lazyloader 的功能?

谢谢你。

跟进:在与 Cheeso 进行问答之后,我现在发现我问错了关于我最终需要发生什么的问题。我添加此评论是为了避免让任何未来的读者因为我的坏问题而感到困惑。这与命名空间无关,甚至与访问不应做的私有函数无关。如果您真的不知道自己在做什么,那么这个线程最终是关于尝试和 frankenstein 库一起可能是多么不可取。; ) 结束跟进

swipe.js 中的回调:

在 html 中调用的脚本:

jquery.lazyloader.js:

0 投票
1 回答
1064 浏览

backbone.js - 主干.js 模型不是路由器的构造函数

我有一个backbone.js 命名空间应用程序演示的问题,我正在尝试显示一个简单的本地存储元素列表,当我调用应用程序时,控制台会检索此错误

部分代码在路由器部分;

上述分区代码第五行出现的错误。

这是命名空间文件 app.js:

这是模块文件:

0 投票
3 回答
959 浏览

javascript - 命名空间模式导致 JSLint '函数在定义之前被使用' 错误

我正在使用以下命名空间模式:

JSLint 抱怨bar它在定义之前就被使用了。然而foo,直到 afterbar被声明后才被调用。该代码适用于我尝试过的所有浏览器:http: //jsfiddle.net/jDKvz/

该模式是按照如何在 JavaScript 中声明命名空间?,第二个答案。

我需要在这里修复什么,还是应该忽略 JSLint?