2011-08-02 22 views
19

Đối với các lớp học của tôi khá giống với các mô-đun NodeJS (CommonJS). Bạn có thể có nhiều người trong số họ, họ có thể được tái sử dụng, họ có thể sử dụng lẫn nhau và họ thường là một mỗi tập tin.Mô-đun NodeJS và các lớp

Điều gì làm cho các mô-đun khác với các lớp học? Cách bạn sử dụng chúng khác nhau, và sự khác biệt về không gian tên là hiển nhiên. Bên cạnh đó họ có vẻ rất giống với tôi hoặc có lẽ tôi không thấy lợi ích rõ ràng ở đây.

+0

điều mà tôi tò mò là điểm chuẩn trên máy chủ node.js - commonjs modules vs ECMAScript 6 classes –

Trả lời

21

Mô-đun giống như các gói (sử dụng thuật ngữ Java) hơn các lớp. Bạn không khởi tạo một mô-đun; chỉ có một bản sao của nó. Đó là một công cụ để tổ chức các chức năng liên quan, nhưng nó thường không đóng gói dữ liệu của một cá thể cụ thể của một đối tượng.

Có lẽ sự tương tự gần nhất với một lớp (đặt sang một bên những thư viện thực sự xây dựng kế thừa dựa trên lớp trong JavaScript) chỉ là hàm dựng. Tất nhiên bạn có thể đặt các chức năng như vậy bên trong một mô-đun.

function Car() { 
    this.colour = 'red'; 
} 
Car.prototype.getColour = function() { return this.colour; }; 

var myCar = new Car(); 
myCar.getColour(); // returns 'red' 

Bạn sử dụng cả mô-đun và lớp học để đóng gói, nhưng bản chất của đóng gói đó là khác nhau.

0

Một điều quan trọng; rằng "thường một lần cho mỗi tập tin" điều không đúng; mô-đun hoàn toàn một lần cho mỗi tệp. Một require() mang lại mô-đun exports của mô-đun vào không gian tên không có cách nào để phân biệt giữa nội dung đã xuất của mô-đun đó; tất cả mọi thứ mà mô-đun (tập tin) xuất khẩu được nhập khẩu với một tuyên bố require(). Cố gắng để đặt nhiều hơn một mô-đun vào một tập tin chỉ có nghĩa là bạn sẽ nhận được tất cả mọi thứ trong tập tin đó khi bạn cố gắng tải "hoặc" mô-đun.

1

JS ban đầu là hệ thống kế thừa nguyên mẫu. Nó rất đơn giản như phần còn lại của ngôn ngữ. Nhưng sau đó Netscape quyết định làm cho nó giống Java hơn và thêm ý tưởng về các nhà xây dựng cho ngôn ngữ. Do đó các lớp giả được sinh ra. Bạn có thể kiểm tra liên kết này để biết cách OOP nguyên mẫu được sử dụng trong JS: http://howtonode.org/prototypical-inheritance