每当我看到引用JS命名空间时,它都是用对象表达式实现的。如果我想在分配任何属性之前确定我的命名空间是否存在,我可以通过函数声明来实例化它吗?
e.g;
function namespace() {}
VS
let namespace = {};
前者被悬挂,并保证我附加到我的命名空间的属性不会遇到" undefined"错误。
我知道它至少对我的基本测试起作用,但对此有利有弊吗?
编辑:另一个例子:https://jsbin.com/nuquxuxinu/edit?js,console
编辑:Bergi提供了一些很好的说明,但我仍然需要确信为什么使用函数作为命名空间是一个坏主意。
答案:由于我的问题被标记为"基于意见"我只能推断,为什么你不应该为命名空间使用函数,没有技术上的原因。
答案 0 :(得分:1)
不,您不应将命名空间对象设为函数对象,除非您需要它是可调用的。如果函数什么都不做(比如你的例子),不要使用函数。
吊装对您没有任何好处。变量声明 document.body.style.cursor = 'progress';
var type = document.appendEqprop[5].value.toUpperCase();
var valueS = document.appendEqprop[6].value.toUpperCase();
var canSubmit = validateEntry(type,valueS);
if (canSubmit)
{
document.appendEqprop[11].disabled = false;
document.body.style.cursor = 'default';
}
if (!canSubmit || valueS.length == 0)
{
document.appendEqprop[11].disabled = true;
}
为hoisted just as well。实际上重要的是命名空间的成员是在使用它们之前创建的,它们是通过赋值创建的。只需在文件中按正确顺序放置它们 - 首先是命名空间对象实例化,然后是该对象的属性(如果它们尚未作为对象文字中的一部分创建),则使用该命名空间的代码。