2013-03-27 9 views
9

Próbuję ustalić metodę, która zapewni mi najbardziej elegancki sposób zawijania mojego kodu w obiektach takich jak Namespace/Unit. Na przykład Google Maps API to var a = Google.Maps.Foo();, który moim zdaniem wydaje się całkiem czysty.Najbardziej elegancki sposób tworzenia struktury typu Namespace/Class w JavaScript

Chciałbym go wstaw (jeśli jest to właściwe określenie) znak jQueryNo Conflict$ również.

Do tej pory mam lubić:

// 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)); 

Może ktoś rozwinąć to, wskazać potencjalne problemy, lub po prostu zaoferować lepsze metody w ogóle?

+2

Nigdy nie jest * większość * elegancki sposób, aby coś zrobić, bo elegancja subiektywny. – Philipp

+0

Wszystko, czego potrzebujesz, aby podjąć najlepszą decyzję dla ciebie, jest tutaj: http://stackoverflow.com/questions/881515/javascript-namespace-declaration – NinjaNye

+0

@NinjaNye Ah tak, to tam kod z, próbuję rozwinąć na to naprawdę. –

Odpowiedz

11

Sprawdź to JavaScript Module Pattern i to Learning JavaScript Design Patterns

Moduł przykład:

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(); 

przykład Klasa:

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

Ładne artykuły :) (chociaż druga jest trochę niezgrabna) – Simon

+0

To książka :) autorstwa Googler Addy Osmani – kayz1

+1

Bezszumowa pojedyncza wycena boli nasze oczy;) –

Powiązane problemy