我正在尝试在 javascript 中创建嵌套类定义,以便只有一个全局对象。
目前我们定义这样的新类:
FOO.Navigation.Sidebar.Tooltip = function()
{
};
所以在每个函数定义中,我们必须重复整个嵌套类命名空间:
FOO.Navigation.Sidebar.Tooltip.prototype.show = function()
{
/* do something here */
};
我们引入了一个命名空间函数来创建类。
FOO = { /* ... */ }
FOO.namespace = function(namespaceString)
{
var namespaceParts = namespaceString.split('.');
var currentRoot = FOO;
var index = 0;
// Skip the first namespacePart, if it is already "FOO"
if ("FOO" == namespaceParts[0])
{
index = 1;
}
var currentPart;
for(index; index < namespaceParts.length; index++)
{
// This is the next element in the namespace hierarchy.
currentPart = namespaceParts[index];
// Add a new map for the currentPart to the root (if it does not exist yet).
currentRoot[currentPart] = currentRoot[currentPart] || {};
// The currentPart will be the new root in the next loop.
currentRoot = currentRoot[currentPart];
}
return currentRoot;
};
现在我们想用它来创建一个更易读的先前定义的版本,它应该看起来像这样:
FOO.Navigation.Sidebar.Tooltip = function()
{
this.hallo = "world";
};
var tooltip = FOO.Navigation.Sidebar.Tooltip;
tooltip.prototype.show = function()
{
/* do something */
};
这将创建一个新的全局变量“工具提示”,我们必须输入两次类名。所以我们想使用这样的匿名函数:
(function(tooltip) {
tooltip = function()
{
this.hello = "world";
};
tooltip.prototype.show= function()
{
/* do something */
};
}) (FOO.namespace("FOO.Navigation.Sidebar.Tooltip"))
这显然是行不通的,因为我们为“工具提示”分配了一个新的函数定义。
所以我的问题是,是否有一种方法可以只编写一次类名而不创建更多的全局变量。