2010-07-16 19 views
9

Nowdays, bir çok işlevi olan bir .js dosyası oluşturur ve sonra html sayfalarına bağlarım. Bu çalışıyorum ama j sayfalarını sayfalara eklemek için en iyi yolun (iyi uygulamaların) neler olduğunu bilmek ve kapsamı ile çakışmaları önlemek istiyorum ... Teşekkür ederim.JavaScript: global kapsam

+1

http: //javascript.crockford.com/code.html – Anders

cevap

1

Belki de EN İYİ yolu değil, ama birçok PHP sistemi (Sana bakıyorum, Drupal) kendi eklentilerinin ismini alıp, tüm işlev adlarına ekleyelim. Benzer bir şey yapabilirdiniz, işlev adınızı işlev adınıza ekleyerek - "mything_do_action()"

Alternatif olarak, daha fazla "OO" yaklaşımı alabilir ve yeteneklerinizi enkapsüle eden bir nesne oluşturabilir ve tümünü ekleyebilirsiniz. BT'de üye işlevleri olarak işlevleriniz. Bu şekilde, küresel kapsamda endişelenecek tek bir şey var.

+0

OO'yu JavaScript ile öğrenmeye çalışıyorum ama benim için zor. JavaScript'te basit bir "sınıf" veya başka bir şey yapmak için bir çok sözdizimi vardır :) Teşekkür ederim. – thomas

6

En iyi yol, yeni bir kapsam oluşturmak ve kodunuzu orada yürütmektir.

(function(){ 
    //code here 
})(); 

Bu, küresel kapsam en düşük düzeyde olduğunda en iyi şekilde kullanılır.

Temel olarak, bu anonim bir işlevi tanımlar, ona yeni bir kapsam verir ve çağırır. Eğer yeniden kullanmak gerekiyorsa,

(function(){ /* */ })();

Ancak:

var NameSpace = { 
    Person : function(name, age) { 

    } 
}; 

var jim= new NameSpace.Person("Jim", 30); 
+0

"()" ne anlama geliyor? Bununla ilgili bir link var mı? Ve pencere.onload nedir? Bunu nereye koymalıyım? JavaScript'te bootstrap benzeri bir uygulama var mı? Teşekkür ederiz. – thomas

+0

Şahsen ben bir satırda hepsini görürseniz anonim bir işlevi anlamak daha kolay olduğunu düşünüyorum. Maalesef yorumlarda satır sonları yok, ancak bu şekilde düşünürseniz: zaten var olan bir işlevi yürütmek gibi, ancak işlevin adını kullanmak yerine, işlev tanımını parantez içine alırsınız. – lucideer

+0

Aslında bunu örneğin yapabilirsiniz: (işlev (param) {/ * * /}) ('param değeri'); – lucideer

9

Basit bir fikir ad birini temsil etmektedir nesne kullanmaktır Başka bir yerde yazdığınız javascript işlevlerinin tümü (diğer betiklerde), erişilebilecekleri tek bir global nesne oluşturmaktan daha iyidir. gibi Ya: (aynı şeyi yapar)

var mySingleGlobalObject={}; 
mySingleGlobalObject.someVariable='a string value'; 
mySingleGlobalObject.someMethod=function(par1, par2){ /* */ }; 

veya alternatif, daha kısa sözdizimi:

Sonra bu gibi diğer komut daha sonra erişilebilir
var mySingleGlobalObject={ 
    someVariable:'a string value', 
    someMethod:function(par1, par2){ /* */ } 
};

:

mySingleGlobalObject.someMethod('jack', 'jill');
12

Sen gibi anonim bir işlevde onları sarabilirdiniz:

+0

Kodunuzu her zaman sarmak daha güvenli olduğunu düşünüyorum (function() {/ * * /})(); Sadece fena halde sonlanan bir betik dahil ederseniz. Öyleyse, mySingleGlobalObject öğenizi, örneğin başka bir betikle paylaşmak için "belge" ye ekleyebileceğinizi tahmin ediyorum. – endavid