2013-03-27 13 views
9

Kodumu Namespace/Unit gibi nesneler gibi sarmalamanın en zarif yolunu sağlayacak bir yönteme yerleşmeye çalışıyorum. Örneğin, Google Haritalar API'sının var a = Google.Maps.Foo(); olduğunu düşünüyorum. (Doğru terim ise)JavaScript'te bir Ad Alanı/Sınıf tipi yapı oluşturmanın en zarif yolu

Ben de enclose-jQueryNo Conflict$ işareti bunu istiyorum.

Şimdiye kadar sevme duyuyorum:

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

herkes potansiyel sorunlara işaret bu genişletmek, ya da sadece genel olarak daha iyi bir metodoloji sunabilir mi?

+2

zarafet çünkü şey yapmak için bir * En * zarif yolu vardır asla öznel. – Philipp

+0

Sizin için en iyi kararı vermeniz gereken her şey burada: http://stackoverflow.com/questions/881515/javascript-namespace-declaration – NinjaNye

+0

@NinjaNye Ah evet, kodun nereden geldiğini, genişletmeye çalışıyorum gerçekten. –

cevap

11

Kontrol bu JavaScript Module Pattern ve bu Learning JavaScript Design Patterns

Modül örnek:

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

Sınıf örneği:

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

Güzel makaleler :) (İkinci olanı biraz hantal olsa da) – Simon

+0

Bu bir kitaptır :) Googler Addy Osmani tarafından – kayz1

+1

Tarif edilmeyen tek teklif acıtıyor gözlerimiz;) –

İlgili konular