2015-11-20 22 views
6

Tôi biết rằng một mô-đun như thế này:Sự khác biệt giữa đóng và mô-đun là gì?

function User(){ 
    var username, password; 

    function doLogin(user, pw){ 
     username = user; 
     password = pw; 
    }; 
    var publicAPI = { 
     login: doLogin 
    }; 
    return publicAPI; 
} 

có đóng cửa bên trong của nó: doLogin, và được ghi nhớ các giá trị của các biến usernamepassword mà bên User, điều này làm cho một "đóng cửa" . Những gì tôi không hoàn toàn hiểu là nếu bất cứ khi nào chúng tôi sử dụng một đóng cửa, chúng tôi đang sử dụng mô hình mô-đun? hoặc ngay sau khi tôi lưu các chức năng của User trong một biến như var User = function(){... không phải là một mô-đun ... Xin lưu ý tôi đang học js.

+2

Mẫu mô-đun đang sử dụng bao đóng chứ không phải theo cách khác. Đóng cửa là một phần không thể thiếu của ngôn ngữ, các mô-đun chỉ là một * mẫu * nổi lên từ chúng (và có rất nhiều thứ khác bạn có thể làm với các bao đóng). – Bergi

Trả lời

4

Bạn đã triển khai chức năng nhà máy cho User s.

Bạn đang "gần như" sử dụng mẫu mô-đun tiết lộ. Hầu hết mọi người sẽ nói rằng mô hình mô-đun tiết lộ cần phải được gọi ngay lập tức. Các mẫu mô-đun thường được sử dụng cho tổ chức mã. Những gì bạn có ở đây thay vào đó là một nhà máy đối tượng.

Đóng cửa được sử dụng bởi mô hình mô-đun (tiết lộ) (và các mẫu khác) để đạt được sự đóng gói của trạng thái riêng tư.

Đóng cửa được tạo bất cứ khi nào một hàm được xác định. Chúng là một tính năng ngôn ngữ của JavaScript để làm việc với các hàm dễ dàng hơn.

+1

Tôi gọi đó là mẫu nhà máy. Từ "mô-đun" thường chỉ được sử dụng cho các đối tượng được tạo tĩnh, trong đó đóng là một IEFE. – Bergi

0

Đóng cửa là cách để đóng (hoặc nắm bắt) thông tin hoặc trạng thái từ phạm vi kèm theo. Về cơ bản nó là một phương tiện để kéo dài tuổi thọ của một biến.

Mô-đun là cách ẩn cài đặt và trạng thái từ thế giới bên ngoài.

Vì vậy, doLogin() đang đóng trên cả hai usernamepassword và do đó tăng tuổi thọ của chúng. Và đối tượng được yêu cầu bởi publicAPI đang ẩn việc triển khai doLogin() từ người dùng

Các vấn đề liên quan