Javascript 如何构建模拟类库和控制作用域使用的模块
我开始在Javascript中使用OO概念 因此,我有几个“类”js文件,每个文件都模拟一个OO对象。 每个类都在一个文件中定义,如myClass1.js、myClass2.js等 每个类看起来像:Javascript 如何构建模拟类库和控制作用域使用的模块,javascript,Javascript,我开始在Javascript中使用OO概念 因此,我有几个“类”js文件,每个文件都模拟一个OO对象。 每个类都在一个文件中定义,如myClass1.js、myClass2.js等 每个类看起来像: // FILE myproject.classlib.myClass1 // "Class" function myClass1(param1, param2){ // Properties this.prop1 = param1; this.prop2 = param2; }
// FILE myproject.classlib.myClass1
// "Class"
function myClass1(param1, param2){
// Properties
this.prop1 = param1;
this.prop2 = param2;
}
/// "Methods"
myClass1.prototype.doSomething = function(){
alert('myClass1 Hello world. prop1=' + this.prop1);
alert('myClass1 Hello world. prop2=' + this.prop2);
}
现在我需要构建一个模块来控制这些类的使用范围,并将它们组织到“库”中
允许我使用以下内容:
var instance1 = new myProject.myClassLibrary1.myClass1('a', 'b');
var instance2 = new myProject.myClassLibrary1.myClass2('c', 'd');
var instance3 = new myProject.myClassLibrary2.myClass1('e', 'f');
var instance4 = new myProject.myClassLibrary2.myClass2('g', 'h');
instance1.doSomething(); /// prop1=a prop2=b
instance2.doSomething(); /// prop1=c prop2=d
instance3.doSomething(); /// prop1=e prop2=f
instance4.doSomething(); /// prop1=g prop2=h
如何定义原始类代码定义,使其属于myClassLibraryN和myProject
如何将此库用作第二个代码?看起来您正在寻找将代码组织到库/名称空间中的策略。如果是这样的话,就试着用关键词“JavaScript名称空间”在谷歌上搜索一下。以下是为您找到的一个博客:。希望有帮助。您可以创建如下名称空间:
var namespace1 = namespace1 || {};
namespace1.namespace2 = namespace1.namespace2 || {};
namespace1.namespace2.MyClass = function() {
//Constructor code...
this.x = 0;
};
namespace1.namespace2.MyClass.prototype.increment = function() {
this.x++;
};
// And so on...
第一行基本上检查名称空间1是否已定义,如果已定义,则不创建它;但是,我们创建了一个空对象,所以我们可以在其他情况下将值附加到对象上。虽然答案是正确的,但我想告诉您一种更好的方法,可以在不污染全局名称空间的情况下声明名称空间
var myProject = myProject || {};
myproject.myClassLibrary1 = {};
(function (namespace, undefined) {
// private properties
var foo = "foo",
bar = "bar";
// public methods and properties
namespace.foobar = "foobar";
namespace.myClass1 = function () {
speak("hello world");
};
// private method
function speak(msg) {
console.log("You said: " + msg);
};
})(myproject.myClassLibrary1);
var myProject={myClassLibrary1:{myClass1:myClass1,…}代码>-这就是你的意思吗?@Mendez这个答案指的是除纯JavaScript以外的任何东西吗?此外,pascal外壳类是区分普通函数和类构造函数的常用方法。如果有人认为它是一个普通函数,并且没有在类构造函数前面加上'new'关键字,“this”将指窗口。很难找到虫子!