首页 > 解决方案 > 为什么JS说这个函数不是函数

问题描述

我试图了解这里发生了什么......我正在开发这个项目,该项目使用带有地址自动完成的谷歌地图。place_changed当用户选择触发方法的地址时,会有一个回调onPlaceChanged()

问题是在该方法中我不能调用任何其他方法,它给出了这个错误:

TypeError:this.er 不是函数

但是功能是存在的。

class MyMap {
   constructor() { }
   maps() {
      autocomplete = new google.maps.places.Autocomplete(
         document.getElementById('city-name'),
         { types: [ 'geocode' ] } );

      autocomplete.addListener('place_changed', this.onPlaceChanged);
   }

   onPlaceChanged() {
      this.er();
   }

   er() {
      console.log('please call me');
   }
}

标签: javascript

解决方案


我猜问题是this范围界定。

Autocomplete调用你的函数onPlaceChanged,但可能没有设置范围,因为你没有告诉Autocomplete你想要哪个范围。

您可以使用以下方法解决此问题:

autocomplete.addListener('place_changed', this.onPlaceChanged.bind(this));

这将生成一个新函数,该函数this在调用原始函数之前自动绑定为范围onPlaceChanged


推荐阅读