gpt4 book ai didi

用于安全创建命名空间的 Javascript 实用程序函数

转载 作者:行者123 更新时间:2023-11-30 00:28:24 25 4
gpt4 key购买 nike

在 JS 中动态安全地创建命名空间的最佳和最安全的方法是什么?

我需要为我目前正在开发的小型实用程序库提供一个实用程序函数。基本上,我希望它检查我的命名空间的任何部分是否已经存在,并且是一个对象,否则这部分必须被初始化并附加为一个空对象。在这里找到它作为一个 jsbin,这样你就可以轻松地摆弄它:

http://jsbin.com/leyijojozo/1/edit?js,console

var createNamespace = function (className) {
var parts = className.split(".");

var context = window;

for (var i = 0; i < parts.length; i++) {
if (!context[parts[i]] || !context[parts[i]] instanceof Object) {
context[parts[i]] = {};
}
context = context[parts[i]];
}
return context;
}

这对于之前不存在命名空间的任何部分的命名空间来说工作正常:

createNamespace("A.B.C");
> {}

返回 {}(因为它应该这样做),如果我之后在控制台中检查命名空间完全存在。

但是,如果命名空间的任何部分已经存在,当然函数不应该改变它。只要所有现有部分都是对象,它就可以工作;但命名空间的一个或多个部分可能存在,例如简单的字符串、数组、 bool 值等。

编辑:造成这个问题的实际用例是我有一个网站大量使用 .我的应用程序中典型的组件定义是这样开始的:

Util.Object.createNamespace("ViewModels.Section.Role").Edit = function (params) { ... }

在许多其他实用函数中(例如驻留在 Util.UrlUtil.Cookie 等)中,我已经像您一样“命名空间”了我的 Util 库可以看到这里,我喜欢这种方法。

我当然知道我可以简单地手动创建命名空间的每个部分,但作为一个实用函数爱好者( 任何人?:))我想要一个简单的函数,它以一种故障安全的方式为我做这件事。

最佳答案

更保守的方法是创建命名空间的一部分 if (context[parts[i]] === undefined)。这样一来,现存的任何内容都无法被覆盖,如果您尝试通过非对象(如 bool 值)推送命名空间,您最终会遇到错误。

关于用于安全创建命名空间的 Javascript 实用程序函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30576548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com