我正在实现一个基于OpenLayers3的Web地图客户端,该客户端应该能够连接到多个WMS服务器,请求WMS功能并显示服务器通告的图层。上述如何避免在每个函数上绑定(this)?
var MyMapClient = function(params) {
this.wms_sources_ = params.wms_sources;
this.wms_capabilities_ = [];
}
MyMapClient.prototype.parse_capabilities = function(index) {
var capabilities = this.wms_capabilities_[index];
// do something with capabilities
}
MyMapClient.prototype.load_wms_capabilities = function() {
var parser = new ol.format.WMSCapabilities();
jQuery.each(this.wms_sources_, (function (index, wms_source) {
console.log("Parsing " + wms_source.capabilities_url);
jQuery.when(jQuery.ajax({
url: wms_source.capabilities_url,
type: "GET",
crossDomain: true,
})).then((function (response, status, jqXHR) {
var result = parser.read(response);
console.log("Parsed Capabilities, version " + result.version);
this.wms_capabilities_[index] = result;
return index;
}).bind(this)).then(this.parse_capabilities.bind(this));
}).bind(this));
};
代码工作正常,但我想打电话给其需要访问MyMapClient
的实例的“私有”变量的函数每次我都bind(this)
。在没有牺牲可读性的情况下,是否有更好的方式来一致地访问实例内部?
这是行不通的:'this this' parse_capabilities'方法不会绑定到“实例”上下文,而是绑定到jQuery的上下文(因为它是jquery调用'parse_capabilities'。 –
我已经提出了这种方法现在删除) - OP说他意识到这种方法(应该可以将其编辑到问题中),但是如果可能的话,要避免,并且@deceze正确地指出“那对于then(self.parse_capabilities)'完全没有帮助“ –
编辑,现在应该工作,虽然少”美丽“...也许'bind()'会更好。 –