Member 10809885 Ответов: 1

Как правильно вызывать функции прототипа в javascript?


У меня есть следующий код с объектом под названием Map, определенным в пространстве имен RHCA. Прототипу карты присваивается объект, содержащий следующие методы.

RHCA.Map = function(centerCoords){
    this.geojson = null;
    this.map = null;
    this.initZoom = 0;
    this.mapColors = [];
    this.mapCenter = centerCoords.slice(0);
    this.geoJsonProperty = null;
    this.dataFieldsMap;
};

RHCA.Map.prototype = {
	setColorRange :function(population){
    	        console.log(this);
		
		var color; // set color according to population value
		... 		

		return  color
	},

	setStyle : function(feature){
    	    console.log(this);
    	    var population =  feature.properties.pop10;
    
    	    var countyColor = this.setColorRange(population);
    	    return {
        	fillColor: countyColor,
        	weight: 0.5,
        	opacity: 1,
        	color: '#4e4e4e',
        	fillOpacity: 0.9,
        	fillRule: 'evenodd',
        	className:'svg-custom'
    	    };
	},

	
	render : function (){
    	     console.log(this);
    	     var self  = this;
    	     var southWest = L.latLng(20.0, -114.0);
    	     var northEast = L.latLng(40.0,-88.0);
    	     var boundRect = L.latLngBounds(southWest, northEast);
    
    	     self.initZoom = self.setZoomLevel();
    
    	     // map object with options
    	     self.map = L.map('map',{
        	center: self.mapCenter,
        	zoom: self.initZoom,
        	maxZoom: self.initZoom+2,
        	minZoom: self.initZoom-0.25,
        	// maxBounds: boundRect,
        	zoomControl:true,
        	reUseTiles:true,
        	unloadInvisibleTiles:true
    	    });
    
    	   // create geojson layer and add it to map   
    	   self.geojson = L.geoJson(countyBoundaries,{
        	style: self.setStyle,
        	onEachFeature: self.onEachFeature
    	   });
    
    	   self.geojson.addTo(self.map);
	}
};


Затем я создаю объект карты Вот так.
var map = new RHCA.Map([-31,99]);


Затем я вызываю функцию render () для объекта map, которая затем вызывает setStyle (). setStyle () затем вызывает setColor ().

Я получил следующую ошибку из браузера, когда вызвал setColorRange () в функции setStyle ().

Uncaught TypeError: this.setColorRange is not a function.


Когда я печатаю "это" с помощью console. log () в render (), он указывает на объект RHCA. Map,
но когда я печатаю "это" в функции setStyle (), она указывает на объект Window. Вместо этого мне нужно "это", чтобы указать на объект RHCA.Map.

Любая помощь будет оценена по достоинству. Спасибо вам.

Что я уже пробовал:

Я пытался изменить эту ситуацию.setColorRange в метода setstyle() функция RHCA.Карте.setColorRange но она производит такую же ошибку как и раньше.

1 Ответов

Рейтинг:
2

Sebastiaan Meijerink

ОК. Я не знаю, что такое L для объекта.
Но я думаю, что это тот код, в котором вы ошибаетесь.

// create geojson layer and add it to map
self.geojson = L.geoJson(countyBoundaries,{
     style: self.setStyle,
     onEachFeature: self.onEachFeature
});

Вы не запускаете self. setStyle, но передаете его другому объекту.
Это не сработает. Когда функция L. getJson пытается оценить стиль, она, по-видимому, в порядке с тем фактом, что это функция, и пытается вызвать ее. Но контекст теряется.
Если бы вы сделали закрытие вокруг него. Это сработает.
// create geojson layer and add it to map
self.geojson = L.geoJson(countyBoundaries,{
     style: function() {
         retun self.setStyle();
     },
     onEachFeature: self.onEachFeature
});