2012-03-21 65 views
6

Tôi có một nền tảng trong OOP. Tôi bắt đầu làm việc rất nhiều với JavaScript. Khi dự án phát triển, nó trở nên khó khăn hơn để duy trì nó. Trong Java, tôi áp dụng các nguyên tắc OOP để giữ cho mọi thứ được kiểm soát. Tôi nên làm gì với JavaScript, tôi nên nghiên cứu những gì để giữ một ứng dụng JavaScript được kiểm soát?OOP vs JavaScript

+0

Hãy xem Backbone.js và có thể là Coffeescript. Họ làm việc rất tốt với nhau. – asawyer

+13

JavaScript là hướng đối tượng. – Gumbo

+0

xem [helephant] (http://helephant.com/2008/08/17/how-javascript-objects-work/) đối với một số ý tưởng OO. – jbabey

Trả lời

6

Bạn cũng có thể áp dụng các nguyên tắc OOP cho quá trình phát triển Javascript. Javascript sử dụng thừa kế prototypal, nhưng đó là một chi tiết thực hiện. Các khái niệm vẫn như cũ. Hầu hết các khái niệm mà bạn quen thuộc đều có tương tự trực tiếp trong javascript.

phương pháp thử và thật sự khác áp dụng cũng như:

1) Stay DRY - Do not Repeat Yourself. Mã trùng lặp luôn là điều ác.
2) Mối quan tâm riêng biệt - Sử dụng các mẫu MVC hoặc MVVM để giữ mã sạch sẽ và chỉ thực hiện 1 điều.
3) Kiểm tra - Khi tôi nghe "Khó duy trì", bộ não của tôi dịch là thiếu kiểm tra. Bạn chắc chắn có thể viết các bài kiểm tra đơn vị cho các dự án javascript.
4) Mã xét - Mã đánh giá có thể là một cách tốt để từ chối đang nhân đôi, mã mà không được chế tác đúng cách, không được định dạng, vv ....

+0

... tốt, đủ gần. Sự khác biệt là quan trọng để biết tuy nhiên; nó chắc chắn đáng xem xét lâu dài. –

+0

Ý của bạn là 'đủ gần'? Bạn có đồng ý không? – hvgotcodes

+0

Một nguyên mẫu không đồng nghĩa với một phân lớp; có một số khác biệt về cách các trường và chức năng được 'áp dụng'. Ví dụ, nhiều đối tượng chia sẻ một nguyên mẫu có nghĩa là chia sẻ một trường mẫu và việc thay đổi nó có thể thay đổi một thuộc tính cho tất cả các đối tượng phụ. –

-1

Trong JavaScript, chức năng là các đối tượng; Mozilla Developer Network,McKoss,SitePoint,JavaScript Kit giải thích thêm.

Ví dụ JavaScript Object

function myObj() { 
    this.myMethod = function() { 
    alert('hello'); 
    } 
} 
var demo_obj = new myObj(); 
demo_obj.myMethod(); 

Patterns để giữ cho mọi thứ trong tầm kiểm soát

  • Các mẫu được liệt kê ở đây là đặc biệt đến JavaScript.
    1. Use a Script Loader.
    2. Use a JS Framework.
    3. Lint your JavaScript. - Các công cụ sẵn có để chạy trên máy tính để bàn của bạn trong Rhino hoặc nút.
    4. Minify your JS.
  • Các mẫu được liệt kê ở đây là điển hình của OOP Ngôn ngữ, và không phải là đặc biệt đến JavaScript.
    1. KHÔ - Không lặp lại chính bạn.
    2. Mẫu quan sát (Pub/Sub).

Anti-Patterns để cho những điều ngoài tầm kiểm soát

  1. gây ô nhiễm không gian tên
  2. sử dụng eval()
  3. Prototyping chống lại các đối tượng Object
  4. Inline Script Thẻ.
  5. sử dụng document.write
+3

Và cách này trả lời câu hỏi? – delnan

0

Khi tôi còn trong tình cảnh tương tự tôi bắt đầu nhìn vào "làm thế nào khác đã làm". Nó đã kết thúc với http://dojotoolkit.org/http://jquery.com và tôi đã tìm cách họ triển khai các tiện ích/plugin để có thể mở rộng khung công tác.

2

Đây là cách bạn xác định đối tượng và phương pháp trong javascript.

function SomeObj() { 

    this.someMethod = function() { 
     alert('boo'); 
    } 
} 

var o_obj = new SomeObj(); 
o_obj.someMethod(); //alerts "boo" 

Hy vọng điều đó sẽ hữu ích.

Bạn cũng có thể sử dụng mẫu thử nghiệm để tạo các chức năng tĩnh.

this.prototype.someMethod = function() { 
    alert('boo'); 
} 
+0

Vui lòng sử dụng * chữ cái đầu tiên * trong 'someObj'. Đó là chuyển đổi đặt tên tiêu chuẩn trong JavaScript. Nó cho thấy rằng một nên 'mới' để tạo ra thể hiện của đối tượng. So sánh với ví dụ 'var now = new Date();'. – Oleg

+0

Đúng vậy. Tên đối tượng thậm chí chuyển sang màu xanh, bây giờ chúng bắt đầu bằng chữ hoa. – c0d3Junk13

+0

Tôi khuyên bạn nên sử dụng thêm http://www.jslint.com/ để xác minh mã. Bạn . Bạn sẽ thấy 'Một tên hàm xây dựng 'someObj' sẽ bắt đầu bằng một chữ cái viết hoa' trong mã trước của bạn. Ngoài ra, bạn sẽ thấy rằng bạn nên bao gồm ';' sau 'this.someMethod = function() {alert ('boo'); } 'bởi vì nó là câu lệnh gán. – Oleg

0

Một cách khác để xác định các đối tượng và phương pháp đơn giản trong javascript (không cần new).

function creaeSomeObj() { 
    var that = {}; 
    that.someMethod = function() { 
     alert('boo'); 
    } 
    return that; 
} 

var o_obj = createSomeObj(); 
o_obj.someMethod(); //alerts "boo" 

Mẫu này không hỗ trợ kế thừa, nhưng nhiều lần là đủ.

0

Tại sao "so với"? JavaScript hỗ trợ lập trình hướng đối tượng, nhưng không hỗ trợ theo cách truyền thống dựa trên lớp mà bạn thấy trong ví dụ: Java.

Cách hoạt động của OOP của JavaScript thường được gọi là "thừa kế nguyên mẫu", hoặc cụ thể hơn là "kế thừa prototypal ủy nhiệm". Điều này có thể được đun sôi xuống để "nếu bạn đang tìm kiếm tài sản 'foo' trong một đối tượng, và bạn không thể tìm thấy nó ở đó, sau đó cố gắng tìm 'foo' bên trong của đối tượng nguyên mẫu thay thế". Đó là, việc tra cứu tài sản là được ủy quyền đến mẫu thử nghiệm của đối tượng (chúng tôi nói rằng đối tượng thừa kế các thuộc tính từ nguyên mẫu).

Cách thức hoạt động kế thừa prototypal có một vài tác động. Ví dụ:

  • Đối tượng trong JavaScript là "động" theo nghĩa là chúng chỉ là một nhóm các cặp giá trị tên. Các thuộc tính mới có thể được thêm vào và loại bỏ trong suốt thời gian chạy, vì vậy chúng ít "tĩnh" hơn các đối tượng theo nghĩa lớp học điển hình.
  • Cách delegative công trình thừa kế nguyên chủng ("nếu bạn không thể tìm ra nguyên mẫu đây, sau đó nhìn đây thay vì") có nghĩa là nó nhiều đơn giản hơn OOP cổ điển. Từ quan điểm thuần túy nguyên mẫu, bạn không cần các nhà thầu, ví dụ. "Phương thức" chỉ là các hàm bình thường xảy ra được gắn vào nguyên mẫu (có nghĩa là chúng có sẵn như là các thuộc tính trên tất cả các đối tượng kế thừa).

Có pro và con với cả hai nguyên chủng và thừa kế cổ điển, nhưng điều quan trọng là phải nhớ rằng họ đang khác nhau.

Bây giờ, JavaScript được cảm hứng bởi Java và các ngôn ngữ cổ điển khác, do đó, họ quyết định tạo cú pháp "giống như lớp" để giúp mọi người dễ dàng sử dụng các lớp học hơn. Tôi sẽ không giải thích nhiều về điều này; nó đã được ghi lại ở mức độ lớn ở những nơi khác rồi.

Một số bài viết thú vị:

0

Đa phương tiện chỉ có một khóa học về chủ đề này: Structuring JavaScript Code có thể cung cấp một số thông tin chi tiết. Hai điều kiện tiên quyết: 1. Tôi chưa từng tham gia khóa học - nhưng nội dung có vẻ tuyệt vời và tôi đã rất ấn tượng với các khóa học Pluralsight khác mà tôi đã thực hiện và 2. nó không miễn phí (nhưng có thể đáng giá $ nếu nó giúp bạn tiết kiệm thời gian xuống đường b/c bạn có cấu trúc mã tốt hơn). Không, tôi không làm việc cho Pluralsight.

Ngoài khung công tác js được đề cập trong chủ đề này, bạn cũng có thể xem Knockoutjs - hướng dẫn tuyệt vời tại đây learnknockoutjs.com. Knockout là MVVM tập trung. Lưu ý, có một cuộc thảo luận tốt trong stackoverflow comparing Backbone to Knockout và Pluralsight cũng có một khóa học về cách sử dụng Knockout mà tôi đã xem và đề xuất.