tôi có mã này (JSFiddle)Làm cách nào để tôi có thể xử lý chính xác phương thức "công khai" này?
var OBJ = function(){
var privateVar = 23;
var self = this;
return {
thePrivateVar : function() {
return privateVar;
},
thePrivateVarTimeout : function() {
setTimeout(function() { alert(self.thePrivateVar()); } , 10);
}
}
}();
alert(OBJ.thePrivateVar());
OBJ.thePrivateVarTimeout();
Đây là một khái niệm trừu tượng của một vấn đề thực sự tôi đang gặp.
Vì vậy - tôi mong đợi cuộc gọi đến OBJ.thePrivateVarTimeout()
để chờ 10
và sau đó alert
với 23 (mà tôi muốn truy cập thông qua phương pháp tiếp xúc khác).
Tuy nhiên self
dường như không được đặt chính xác. Khi tôi thiết lập self = this
, có vẻ như this
không phải là tham chiếu đến hàm mà là tham chiếu đến đối tượng chung. Tại sao điều này?
Tôi làm cách nào để đặt phương thức công khai thePrivateVarTimeout
gọi phương thức công khai khác thePrivateVar
?
* Tại sao điều này? * Bởi vì bạn đang gọi hàm thường ('func()'). Trong trường hợp này, 'this' luôn đề cập đến đối tượng chung. Nếu bạn muốn nó tham chiếu đến một đối tượng rỗng, hoặc gọi nó bằng 'new' hoặc gán một cái:' var self = {}; '. –
@FelixKling Cảm ơn điều này làm cho 'self' được đặt chính xác. Tôi vẫn không thể sử dụng nó để gọi 'thePrivateVar'. Tôi nghĩ câu trả lời của Raynos là cách tôi nên làm. –