Javascript "this" 值在函数中未定义

Javascript "this" value is undefined in function

我正在尝试访问设置在“window”级别的变量(我相信)。我可以在所有函数中引用它们,但是当我尝试在事件侦听器函数中引用它时,这些值是未定义的。在下面的代码中,latlng 值未定义。

<script>
        let map;
        let lat;
        let lng;
        let location_name;
        let travel_radius;
        let circleObject;

        const source = document.getElementById('travel-radius-value');
        function inputHandler(e) {
        console.log('old travel_radius: ' + this.travel_radius);
          this.travel_radius = e.target.value;
          console.log('updated travel_radius: ' + this.travel_radius);
          let lat = this.lat; //<-UNDEFINED
          let lng = this.lng; //<-UNDEFINED
          circleObject.setMap(null);
          circleObject = new google.maps.Circle({
                strokeColor: "#FF0000",
                strokeOpacity: 0.8,
                strokeWeight: 2,
                fillColor: "#FF0000",
                fillColor: "#FF0000",
                fillOpacity: 0.35,
                map,
                center: {lat, lng},
                radius: this.travel_radius*1000,
          });
        }
        source.addEventListener('input', inputHandler);

更新:新代码。 latlng 仍未定义

<script>

        let map;
        let lat;
        let lng;
        let location_name;
        let travel_radius;
        let circleObject;

        const source = document.getElementById('travel-radius-value');
        function inputHandler(e) {
        console.log('old travel_radius: ' + this.travel_radius);
          this.travel_radius = e.target.value;
          console.log('updated travel_radius: ' + this.travel_radius);
          circleObject.setMap(null);
          circleObject = new google.maps.Circle({
                strokeColor: "#FF0000",
                strokeOpacity: 0.8,
                strokeWeight: 2,
                fillColor: "#FF0000",
                fillColor: "#FF0000",
                fillOpacity: 0.35,
                map,
                center: {lat, lng},
                radius: this.travel_radius*1000,
          });
        }
        source.addEventListener('input', inputHandler);

value of this 通常是调用方法的对象。在这种情况下,它是事件侦听器绑定到的元素。

使用 this.something 访问任何对象上的 属性

latlng 根本 不是 属性。它们是变量。您不能使用this访问它们。

通常你会只是使用latlng来访问它们,但在这种情况下你已经声明了其他变量(在函数内部) 同名。这会导致局部变量覆盖更广泛范围内的局部变量,从而无法访问它们。

因此您需要重命名两组变量之一。

另请注意,虽然 this.latthis.lngundefined(因为这些属性首先不存在于元素上),但变量 latlng (在更广泛的范围内)是 undefined 因为你初始化它们而不给它们赋值。