我正在实现 Stoyan Stefanov 的 javascript 命名空间函数,因为我一直在阅读他的内容丰富的 JavaScript 模式书;在我的网络应用程序中,但不确定我是否以正确的方式使用它
这是我在此页面http://dalydd.com/projects/module_example/上的 Web 应用程序上使用的功能实现
var COOP = COOP || {};
COOP.namespace = function (ns_string) {
var parts = ns_string.split('.'),
parent = COOP,
i;
// strip redundant leading global
if (parts[0] === "COOP") {
parts = parts.slice(1);
}
for (i = 0; i < parts.length; i += 1) {
// create a property if it doesn't exist
if (typeof parent[parts[i]] === "undefined") {
parent[parts[i]] = {};
}
parent = parent[parts[i]];
}
return parent;
};
COOP.namespace('sliderContainer')
COOP.sliderContainer = function () {
return slider = ($('#slider').length > 0) ? $('#slider') : $('#element_temp');
} // we need this at the beginning as others are dependent on it and call it initially
我的目标是检查 COOP 的每个新属性,以查看它在实施之前是否存在 --- 所以如果我创建一个名为 COOP.sliderContainer 的 COOP 属性 - 我想确保 COOP.sliderContainer 不存在。当我使用命名空间函数时,它返回一个对象,但 COOP.sliderContainer 是一个函数。我觉得我必须做一个额外的抽象层才能命名这个命名空间函数正常工作
var sliderContainer = COOP.namespace('sliderContainer');
sliderContainer.sliderContainer = function () {
return slider = ($('#slider').length > 0) ? $('#slider') : $('#element_temp');
}
这对我来说似乎很愚蠢和多余 - 有没有更好的方法来做到这一点?
任何信息都会一如既往地受到赞赏 - 该页面上有一个指向 js 文件的直接链接