Javascript名称空间和OO组织
我的javascript代码如下所示:Javascript名称空间和OO组织,javascript,oop,namespaces,code-organization,Javascript,Oop,Namespaces,Code Organization,我的javascript代码如下所示: $(document).ready(function () { //call of global functions globalFunction1(); globalFunction2(); //create a new object inside globalFunction3(); } function globalFunction1() { // do something directly with jq
$(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#)
现在,我被要求提供名称空间,以避免函数冲突问题。问题是,我不知道如何实现这一点,给出我当前的代码,并且知道我需要保持代码面向对象。
因此,我想知道是否有一种方法可以有效地添加一些名称空间。只要是添加名称空间,任何建议都可以。使用对象作为函数的容器。这是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();
将对象用作函数的容器。这是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();
只需将函数放入对象中:
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.globalFunction1 = function() {
//do something
};
或者您可以定义名称空间
mynamespace = {};
然后添加具有的函数
mynamespace.globalFunction1();
mynamespace.globalFunction1 = function() {
//do something
};
只需将函数放入对象中:
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.globalFunction1 = function() {
//do something
};
或者您可以定义名称空间
mynamespace = {};
然后添加具有的函数
mynamespace.globalFunction1();
mynamespace.globalFunction1 = function() {
//do something
};
如果您正在寻找管理不断增长的JavaScript代码库的通用方法,请查看和/或。这两个库都允许将代码分成模块位(即AMD或CommonJS模块),然后在它们之间引用/导入。它们包括在部署生产构建时将这些文件捆绑到单个JS文件中的工具。如果您正在寻找管理不断增长的JavaScript代码库的通用方法,请查看和/或。这两个库都允许将代码分成模块位(即AMD或CommonJS模块),然后在它们之间引用/导入。它们包括在部署生产构建时将这些文件捆绑到单个JS文件中的工具。有关答案,请参阅Thx。关于OO代码的第二部分很有趣。你能举个更好的例子吗。例如,我不知道在someObj:function(){???}中放什么,以及如何调用它?答案是Thx。关于OO代码的第二部分很有趣。你能举个更好的例子吗。例如,我不知道在someObj:function(){???}中放什么,以及如何调用它?