如何避免每个函数上的bind(this)?

彼得·科瓦奇

我正在实现一个构建在OpenLayers3之上的Web地图客户端,该客户端应该能够连接到多个WMS服务器,请求WMS功能并显示服务器宣传的图层。

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));
};

上面的代码可以正常工作,但是bind(this)每次必须调用需要访问MyMapClient实例的“私有”变量的函数时,我都必须这样做在不牺牲可读性的前提下,有没有更好的方法来一致地访问实例内部?

马泰奥·塔西纳里(Matteo Tassinari)

我想说的是,利用两全其美的方法,即使用具有正确范围的局部变量,并bind()在需要的地方调用

MyMapClient.prototype.load_wms_capabilities = function() {
    var parser = new ol.format.WMSCapabilities(),
        _this = this;

    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;
        }).then(
          function() { return _this.parse_capabilities(); }
          // or else
          // _this.parse_capabilities.bind(_this)
          // pick the one you like more
        );
    });
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何避免在R中的用户定义函数上使用sapply()

如何告诉编译器在每个C函数上填充特定数量的字节?

如何避免对每个元素使用函数来循环变换矩阵

Typescript和Jest:避免在模拟函数上键入错误

我怎么知道何时在JS中的函数上使用.bind()?

在异步函数上调用`bind()`部分有效

bind(this)在ajax成功函数上不起作用

Django 在每个 Render on CRUD 函数上闪烁/闪烁

PHP如何正确替换函数上的文字?

如何验证重载构造函数上的输入?

如何在groupby函数上应用nsmallest

如何避免使用NumberFormatInfo删除浮点数上的.0

如何避免每个命令的ifs?

如何避免在每个渲染器上执行useState函数参数(以获得初始值)?

如何避免useReducer(reducer,getInitialState())中使用的getInitialState()函数在每个渲染器上运行?

如何避免“算术”。在C#中的每个数学函数前面?

如何在id函数上应用class函数?

如何在匿名函数上使用绑定函数

如何避免递归函数的StackOverflowError

如何在观测函数上获得多个结果?

如何在同一函数上绘制不同的域

如何在 AWS lambda 函数上安装 mqtt 库

如何在窗口函数上传递参数

如何在Flutter构造函数参数上使用@required注释?

如何在forEach函数上进行异步等待

HANA:如何在 RAND() 函数上设置种子?

如何在异步函数上使用多个装饰器?

如何在构造函数上指定不可推导的模板参数?

如何在JS文件Firebase函数上导入ts文件