2011-09-22 83 views
2

就像C#或Java來把我所有的jQuery代碼在一個.js文件中,這樣的事情:如何使用JavaScript創建命名空間和類/ jQuery的

namespace MySite 
{ 
    class HomePage 
    { 
     function Init(params) { /*...*/ } 
     //... 
    } 

    class ContactForm 
    { 
     function Validate() { /*...*/ } 
     //... 
    } 
} 

所以,你可以把它用這種方式:

$(function() { 
    MySite.HomePage.Init({a : "msg"}); 
}); 

我有這樣的代碼,但不工作:

$.namespace = function() { 
    var a = arguments, o = null, i, j, d; 
    for (i = 0; i < a.length; i = i + 1) { 
     d = a[i].split("."); 
     o = window; 
     for (j = 0; j < d.length; j = j + 1) { 
      o[d[j]] = o[d[j]] || {}; 
      o = o[d[j]]; 
     } 
    } 
    return o; 
}; 

$.namespace('$.mysite'); 

$.mysite.Home = function() { 

    function Home(params) { 
     //... 
    }; 

    Home.prototype = function() { 
     Init: function() { 
      alert("lol"); 
     } 
    } 
}; 

是否有可能在jQuery的? (類似的東西或建議/例子,以保持我的jQuery代碼的組織。) 感謝您的時間和答案(抱歉我的英語不好)。

回答

3

爲什麼不把它放入一個js對象?

var _o = {}; 
_o.module1 = {}; 
_o.module2 = {}; 

_o.module1.someFunc = function(){//code}; 
_o.module2.someFunc = function(){//code}; 
0
var nameSpace= {}; 
nameSpace.nameSpace1= nameSpace.nameSpace1|| (function() 
    { 
    }()); 
3
var MODULE = (function() { 
    var my = {}, 
    privateVariable = 1; 

    function privateMethod() { 
    // ...  
    } 
    my.moduleProperty = 1; 
    my.moduleMethod = function() { 
    // ...  
    }; 
    return my; 
    }()); 

如果我深知,要在jQuery的添加您的命名空間。爲此,您需要使用名爲子模塊的技術;

MODULE.sub = (function() { 
    var my = {}; 
    // ... 
    return my; 
}()); 

或者,你可以使用模塊導入

(function(jQuery){ 
    jQuery.myNamespace = {}; 
    jQuery.myNamespace.myFunc = function(arg){ 
     console.log(arg); 
    }; 
}($)); 

之後,你可以像這樣運行:

$.myNamespace.myFunc("somevalue") 

它會寫:

LOG: raera 

更多技術和示例,請參見http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

0
MySite = { 
    HomePage : { 
     Init: function(params) { /*...*/ } 
    }, 
    ContactForm: { 
     Validate: function() { /*...*/ } 
    } 
};