我是JavaScript新手,我試圖創建一個MapManager類來實例化其他一些管理器,這些管理器將管理Google地圖的不同方面;如標記,不同的視圖等將「this」傳遞給在類中實例化的類
我遇到的問題是,當我試圖將「this」作爲參數傳遞給其他類,MapManager正在實例化時,它只傳遞一個空的實例MapManager(JavaScript控制檯顯示「MapManager {}」並調用MapManager類的內部聲明的函數時,我得到的錯誤。)
var MapManager = function(map) {
var markerManager = new MarkerManager(this);
var viewManager = new ViewManager(this);
var getMarkerManager = function() {
return markerManager;
}
var getViewManager = function() {
return viewManager;
}
var getMap = function() {
return map;
}
return {
getMarkerManager: getMarkerManager,
getViewManager: getViewManager,
getMap: getMap
}
}
var MarkerManager = function(mapManager) {
var map = mapManager.getMap();
var markers = {};
var createMarker = function(id, latitude, longitude) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(latitude, longitude),
map: map,
animation: google.maps.Animation.DROP
});
marker.set("id", id);
markers[id] = marker;
var listener = new google.maps.event.addListener(marker, "click", function() {
mapManager.getViewManager().setZoomToClient(id);
};
};
return {
createMarker: createMarker
};
}
var ViewManager = function(mapManager) {
var map = mapManager.getMap();
var setBoundView = function() {
var bounds = new google.maps.LatLngBounds();
var markers = mapManager.getMarkerManager.getMarkers();
for(id in markers) {
bounds.extend(markers[id].getPosition());
}
map.fitBounds(bounds);
};
return {
setBoundView: setBoundView
};
}
我不是能夠通過在JavaScript「這個」依賴注入?如果您能夠比較JavaScript中「this」與其他語言之間的差異,那麼知道我熟悉PHP,Java和Python可能會有所幫助。
不解決您的問題,但向您展示如何使用原型和原因。 JS不會真的支持私有變量,我通常遠離使用它們的模式。可以在原型上有「私有」方法,但我從來沒有使用它們:http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711 – HMR