Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript名称空间和OO组织_Javascript_Oop_Namespaces_Code Organization - Fatal编程技术网

Javascript名称空间和OO组织

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

我的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#) 现在,我被要求提供名称空间,以避免函数冲突问题。问题是,我不知道如何实现这一点,给出我当前的代码,并且知道我需要保持代码面向对象。
因此,我想知道是否有一种方法可以有效地添加一些名称空间。只要是添加名称空间,任何建议都可以。使用对象作为函数的容器。这是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(){???}中放什么,以及如何调用它?