2013-03-27 2 views
9

Namespace/Unitのオブジェクトにコードをラップする最もエレガントな方法を提供する方法を解決しようとしています。例えば、Google Maps APIのvar a = Google.Maps.Foo();は、私は非常にきれいだと思います。JavaScriptでネームスペース/クラス型構造を作成する最もエレガントな方法

(つまり、右項の場合)私も同封jQueryNo Conflict$記号を、それをしたいと思います。

これまでのところ私は好きいます:

// Top level container for sub objects 
var myApp = myApp || {}; 

// An object to be held in myApp  
(function(skillet, $, undefined) { 

    //Private Property 
    var isHot = true; 

    //Public Property 
    skillet.ingredient = "Bacon Strips"; 

    //Public Method 
    skillet.fry = function() { 
     var oliveOil; 

     addItem("\t\n Butter \n\t"); 
     addItem(oliveOil); 
     console.log("Frying " + skillet.ingredient); 

     return "Fried!"; 
    }; 

    //Private Method 
    function addItem(item) { 
     if (item !== undefined) { 
      console.log("Adding " + $.trim(item)); 
     } 
    } 

}(window.myApp.skillet = window.myApp.skillet || {}, jQuery)); 

は、誰もが潜在的な問題を指摘し、この上で展開する、または単に一般的に、より良い方法を提供することはできますか?

+2

優雅さがあるので、何かをする*最も*エレガントな方法は、決してありません主観的。 – Philipp

+0

あなたのために最善の決断を下すために必要なものはすべてここにあります:http://stackoverflow.com/questions/881515/javascript-namespace-declaration – NinjaNye

+0

@NinjaNyeああ、それはどこからコードがありますか、私は拡大しようとしています本当に。 –

答えて

11

チェックこのJavaScript Module Pattern このLearning JavaScript Design Patterns

モジュール例:

var MyModule = (function($){ 
    var MY_CONSTANT = 123; 

    var _myPrivateVariable = 'TEST MEH'; 
    var _$myPrivateJqueryObject = $('div.content'); 

    var _myPrivateMethod = function(){ 
    alert('I am private!'); 
    }; 

    var myPublicMethod = function(){ 
    console.log('Public much?'); 
    } 

    return { 
     myPublicMethod : myPublicMethod 
    }; 

})(jQuery); 

MyModule.myPublicMethod(); 

クラス例:

function Person(name, age){ 
    this.name = name || ''; 
    this.age = age || -1; 
} 

Person.prototype.greet= function(){ 
    console.log('Hi! My name is' + this.name + '. Old ' + this.age + ' I am.'); 
} 

var person = new Person("John", 12); 
person.greet(); 
+0

ニースの記事:)(第2のものはちょっと不器用ですが) – Simon

+0

これは本です:Googler Addy Osmani著 – kayz1

+1

unescaped single quote hurts私たちの目;) –

関連する問題