2012-03-12 29 views
10

Tôi đang cố triển khai Mô hình Mô-đun Tiết lộ nhưng tôi không thể hiển thị thuộc tính riêng đã sửa đổi.Hiển thị các biến riêng trong Mô hình Mô-đun Tiết lộ

var myRevealingModule = (function(){ 

    var name = 'Diogo'; 

    function setName() { 
     name = name + ' Cardoso'; 
    } 

    return { 
     fullName: name, 
     set: setName 
    }; 

}()); 

// Sample usage: 
myRevealingModule.set(); 
console.log(myRevealingModule.fullName); // "Diogo" instead of the excepted "Diogo Cardoso". 

Trả lời

20
return { 
    fullName: name, 
    set: setName 
}; 

Đó sử dụng giá trị của namesetName. Nó không tạo tham chiếu đến biến. Có hiệu lực, name được sao chép.

Bạn cần tạo phương thức getName tương ứng, để tận dụng lợi thế của các bao đóng để bạn có thể giữ tham chiếu đến biến.

13
var myRevealingModule = (function(){ 

    var name = 'Diogo'; 

    function setName() { 
     name = name + ' Cardoso'; 
    }; 

    function getName() { 
     return name; 
    }; 

    return { 
     fullName: name, 
     set: setName, 
     get: getName 
    }; 

}()); 

http://jsfiddle.net/yeXMx/

0

Nếu giá trị của bạn là thuộc tính trong đối tượng hoặc mảng, bạn có thể xuất đối tượng hoặc mảng và xuất sẽ được tham chiếu để bên ngoài người dùng sẽ thấy thay đổi được cập nhật. Đó là một chút rủi ro vì mô hình chung của các biến xuất khẩu có vô hướng/đối tượng sao chép/phân đôi tham chiếu.

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