我的javascript代码如下:
$(document).ready(function () {
//call of global functions
globalFunction1();
globalFunction2(); //create a new object inside
globalFunction3();
}
function globalFunction1() {
// do something directly with jquery selectors
var testObj1 = new object1($('#tree')); // this is called later in the function
testObj.doSomething();
}
function globalFunction2() {
// do other things
}
function globalFunction3() {
// do something directly with jquery selectors
}
//creating an object in js
var object1 = (function () {
var tree;
function object1($tree) {
tree = $tree;
});
}
object1.prototype.doSomething = function () {
.....
};
return fancyStructure;
})();
通常我有更多的全局函数,如果可能的话,我总是尝试使用new关键字创建对象(如在Java或C#中) 现在,我被要求提供命名空间以避免功能冲突问题。事情是我不知道如何实现给出我当前的代码,并知道我需要保持代码面向对象。 因此,我想知道是否有办法有效地添加一些命名空间。只要按照添加命名空间的方式,任何建议都可以。
答案 0 :(得分:2)
使用对象作为函数的容器。这是JS中代码结构的标准方法。
var namespace1 = {
func1: function() {},
func2: function() {},
}
var namespace2 = {
func1: function() {},
func2: function() {},
}
namespace1.func2();
您可以将OOP代码存储在此命名空间中:
var namespace3 = {
someObj: function() {},
create: function() { return new this.someObj(); },
}
namespace3.someObj.prototype = {
count: 15,
someFunc() {}
}
你可以轻松扩展它们:
namespace3.anotherObj = function () {}
修改强>
关于你的例子:
var fancyStructureWrapped = (function () {
var tree;
function fancyStructure($tree) {
tree = $tree;
});
fancyStructure.prototype.doSomething = function () {
.....
};
return fancyStructure;
})();
// add it to some namespace
someNamespace.fancyStructure = fancyStructureWrapped;
//create an instance
var fs = new someNamespace.fancyStructure();
//and use it
fs.doSomething();
答案 1 :(得分:2)
只需将您的功能放入对象:
var mynamespace = {
globalFunction1 : function() {
// do something directly with jquery selectors
var testObj1 = new object1($('#tree')); // this is called later in the function
testObj.doSomething();
},
globalFunction2 : function() {
// do other things
},
globalFunction3 : function() {
// do something directly with jquery selectors
}
}
并使用
调用函数mynamespace.globalFunction1();
或者您可以定义命名空间
mynamespace = {};
然后用
添加函数mynamespace.globalFunction1 = function() {
//do something
};