Javascript 如何构建模拟类库和控制作用域使用的模块

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; }

我开始在Javascript中使用OO概念

因此,我有几个“类”js文件,每个文件都模拟一个OO对象。 每个类都在一个文件中定义,如myClass1.js、myClass2.js等

每个类看起来像:

// 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”将指窗口。很难找到虫子!