如何运行命名空间内的JavaScript函数
如果我有这样的东西:如何运行命名空间内的JavaScript函数,javascript,Javascript,如果我有这样的东西: App = { editingMode: function () { function setEditingMode(entityID) { $('#editingMode').val('1'); $.ajax({ type: "POST", url: "/Organisations/Manage/LockEntity/",
App = {
editingMode: function ()
{
function setEditingMode(entityID) {
$('#editingMode').val('1');
$.ajax({
type: "POST",
url: "/Organisations/Manage/LockEntity/",
data: "entityID=" + entityID
});
}
function setEditingModeOff(entityID) {
if ($("#myform").valid() == true)
{
$('#editingMode').val('0');
$.ajax({
type: "POST",
url: "/Organisations/Manage/UnlockEntity/",
data: "entityID=" + entityID
});
}
}
}
};
如何运行其中一个内部函数
App.editingMode()
但是在设置编辑模式下,我该怎么做?
?您需要返回一个引用,或者从函数外部访问它,例如,将它附加到窗口
(有效地使其成为全局)或者应用程序
对象。您可以使用不同的结构来完成您想要的。我不知道它是否会破坏你正在使用的其他东西,所以我只给你举个例子。我不确定这是不是实际的解决方案,请看一看,并告诉我,如果这不是你需要的。
如果您使用:
var App = {
editingMode:
{
setEditingMode: function(entityID) {
$('#editingMode').val('1');
$.ajax({
type: "POST",
url: "/Organisations/Manage/LockEntity/",
data: "entityID=" + entityID
});
},
setEditingModeOff: function(entityID) {
if ($("#myform").valid() == true)
{
$('#editingMode').val('0');
$.ajax({
type: "POST",
url: "/Organisations/Manage/UnlockEntity/",
data: "entityID=" + entityID
});
}
}
}
};
您可以这样调用editingMode的方法:
App.editingMode.setEditingModeOff(1);
请注意,它们仍将被封装在应用程序中,您不必将它们移动到全局范围。尽管“Nikoloff”给出的答案允许您调用这些函数,但我要指出的是一种稍微不同(可能更好)的方法。 遵循“模块”模式概念不仅可以有效地解决问题,还可以让您拥有私有变量。(搜索“Javascript中的模块模式”,它将为您提供大量在线资源。)
如果这些函数实际上是私有的,那你就不能了。@Cameron名称空间仍然是个好主意。最好只有
App
global,然后才有几十个全局函数、对象等。我想这会管用的。但这几乎让我想知道为什么要使用名称空间:它总是有用的,我不认为我可以在注释中允许的字符数中列出好处。当您有一个包含数十个对象和数十个方法等的大型项目时,您会喜欢名称空间:)
App = {
editingMode: function ()
{
// Below var is no way directly accessible and act as private var
var privateVar =5;
// Below function is going to give access to private var
function getPrivateVar(){
return privateVar;
}
//Your functions - untouched
function setEditingMode(entityID) {
$('#editingMode').val('1');
$.ajax({
type: "POST",
url: "/Organisations/Manage/LockEntity/",
data: "entityID=" + entityID
});
}
function setEditingModeOff(entityID) {
if ($("#myform").valid() == true)
{
$('#editingMode').val('0');
$.ajax({
type: "POST",
url: "/Organisations/Manage/UnlockEntity/",
data: "entityID=" + entityID
});
}
}
return {
setEditingMode: setEditingMode,
setEditingModeOff: setEditingModeOff,
getPrivateVar: getPrivateVar
}
}
};
App.editingMode().setEditingMode();
console.log(App.editingMode().getPrivateVar());