2010-07-16 6 views
9

Ngày nay, tôi tạo tệp .js với nhiều chức năng và sau đó tôi liên kết nó với các trang html của tôi. Đó là làm việc nhưng tôi muốn biết cách tốt nhất (thực hành tốt) để chèn js trong các trang của tôi là gì và tránh xung đột với phạm vi ... Cảm ơn bạn.JavaScript: phạm vi toàn cầu

+1

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

Trả lời

1

Nó có lẽ không phải là cách tốt nhất, nhưng rất nhiều hệ thống PHP (tôi đang nhìn bạn, Drupal) lấy tên của plugin cụ thể của họ và thêm nó vào tất cả các tên chức năng của họ. Bạn có thể làm một cái gì đó tương tự, thêm tên của khả năng của bạn vào tên hàm của bạn - "mything_do_action()"

Cách khác, bạn có thể thực hiện một cách tiếp cận "OO" hơn và tạo một đối tượng đóng gói khả năng của bạn và thêm tất cả chức năng của bạn như là chức năng thành viên trên CNTT. Bằng cách đó, chỉ có một điều trong phạm vi toàn cầu phải lo lắng.

+0

Tôi đang cố gắng tìm hiểu OO bằng JavaScript nhưng rất khó với tôi. Có rất nhiều cú pháp để tạo một "lớp" đơn giản hoặc bất kỳ thứ gì khác trong JavaScript :) Cảm ơn bạn. – thomas

6

Cách tốt nhất là tạo phạm vi mới và thực thi mã của bạn ở đó.

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

Điều này được sử dụng tốt nhất khi phạm vi toàn cầu được truy cập ở mức tối thiểu.

Về cơ bản, điều này định nghĩa một hàm ẩn danh, cung cấp cho nó phạm vi mới và gọi nó.

+0

Ý nghĩa của "()" là gì? Bất kỳ liên kết về điều đó? Và còn window.onload thì sao? Tôi nên đặt nó ở đâu? Có điều gì đó giống như bootstrap trong JavaScript? Cảm ơn bạn. – thomas

+0

Cá nhân tôi nghĩ rằng việc hiểu một hàm ẩn danh dễ dàng hơn nếu bạn thấy tất cả trên một dòng. Thật không may là tôi không có dòng-break trong các comment, nhưng nếu bạn nghĩ về nó theo cách này: nó giống như thực hiện một hàm đã tồn tại, nhưng thay vì sử dụng tên của hàm, bạn đặt định nghĩa hàm trong ngoặc. – lucideer

+0

Bạn có thể thực sự làm điều này ví dụ: (hàm (param) {/ * * /}) ('giá trị param'); – lucideer

9

Một ý tưởng đơn giản là sử dụng một đối tượng đại diện cho không gian tên của bạn:

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

    } 
}; 

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

Bạn có thể bọc chúng trong một chức năng ẩn danh như:

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

Tuy nhiên, nếu bạn cần để tái sử dụng tất cả các hàm javascript bạn đã viết ở nơi khác (trong các tập lệnh khác), bạn nên tạo một đối tượng chung duy nhất trên đó chúng có thể được truy cập. Hoặc như:

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

hoặc thay thế, cú pháp ngắn hơn (mà làm điều tương tự):

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

này sau đó có thể được truy cập sau đó từ các kịch bản khác như:

mySingleGlobalObject.someMethod('jack', 'jill');
+0

Tôi nghĩ rằng an toàn hơn để luôn gói mã của bạn bằng (function() {/ * * /})(); chỉ trong trường hợp bạn bao gồm một kịch bản mà nó bị chấm dứt. Sau đó, tôi đoán bạn có thể thêm mySingleGlobalObject của bạn vào "tài liệu" chẳng hạn, để chia sẻ nó với các tập lệnh khác. – endavid