this в JavaScript

Kirill

Новичок
this в JavaScript

Код:
function G_Map(map_lat, map_lon, map_zoom, html_id){
...
this.selectMarker = selectMarker;
this.DeSelectMarker = DeSelectMarker;
...

function GetStdMarker(point, options, name, description){
	marker = new GMarker(point);
	marker.value = name;

	GEvent.addListener(marker,"mouseover", function() {
		var myHtml = "<b>" + name + "</b>" + "<br>" + description + "<br><i>Для более подробной информации кликните по иконке.</i>";
		selectMarker(this, myHtml);
	});
	
	GEvent.addListener(marker,"mouseout", function() {
		DeSelectMarker();
	});
	
	return marker;
}


function selectMarker(marker, info, obj){
	this.DeSelectMarker();
	
	this.selected_marker = marker;
	icon = marker.getIcon();
	
	this.current_lable = new ELabel(marker.getLatLng(), info, "elabel", new GSize(20, 0), false, true);
	map.addOverlay(current_lable);
}

...
}
При обращении к selectMarker this - это уже не объект G_Map, соотвественно возникают ошибки. Как мне из selectMarker обратится к объекту G_Map ?
 

dimagolov

Новичок
какие prototype (это про то, что крайне криво деклврируются методы, но к проблеме то это отношения не имеет), какие apply()? Автор сказал КАК он вызывает selectMarker? Пока он этого не раскажет обсуждение безпредметно
 

berkut

Новичок
При обращении к selectMarker this - это уже не объект G_Map
может я чё того, но по-моему вполне ясно - нужно вызвать selectMarker в контексте G_Map

-~{}~ 12.03.08 17:21:

и какая разница как он его вызывает?
 

fast2111

Новичок
PHP:
function G_Map(map_lat, map_lon, map_zoom, html_id){
    
    function privateMethod() {
     ....
    }

    function DeSelectMarker() {
     ....
    }
   
    function selectMarker(marker, info, obj){
        DeSelectMarker();
        ...
    }

    //public
    this.selectMarker = selectMarker;
    this.DeSelectMarker = DeSelectMarker;
    ...
}
Как мне из selectMarker обратится к объекту G_Map ?
Как я понимаю обратиться к объекту - вызов его методов/свойств. Или надо к прототипу объекта?

Так что мешает внутри этого объекта писать функции (замыкание вроде как), а после необходимые из них (типа public) вывалить наружу через this?

Или я вообще не в теме?
 

ksnk

прохожий
Как это ни смешно, но selectMarker никакого отношения не имеет к "объекту" G_Map. Оттого и геморой...
Вот еще способ:
PHP:
function G_Map(map_lat, map_lon, map_zoom, html_id){
var th=this;
...
function selectMarker(marker, info, obj){
	th.DeSelectMarker();
	
	th.selected_marker = marker;
...
 
Сверху