Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角形2罐';t调用类函数_Javascript_Google Maps_Google Maps Api 3_Angular - Fatal编程技术网

Javascript 角形2罐';t调用类函数

Javascript 角形2罐';t调用类函数,javascript,google-maps,google-maps-api-3,angular,Javascript,Google Maps,Google Maps Api 3,Angular,在我的类中,我有一个记录错误的简单函数,名为logError(error) 我还使用GoogleMapsAPI获取地址的纬度和经度,所以在我导出的类中,所有这些看起来都是这样的 //Log error logError(err) { console.error('Error: ' + err); } //Get Coordinates from address postcodeCoordinates(address: string, postcode: string)

在我的类中,我有一个记录错误的简单函数,名为
logError(error)

我还使用GoogleMapsAPI获取地址的纬度和经度,所以在我导出的类中,所有这些看起来都是这样的

  //Log error
  logError(err) {
   console.error('Error: ' + err);
  }

  //Get Coordinates from address
  postcodeCoordinates(address: string, postcode: string) {
    var geocoder =  new google.maps.Geocoder();
    geocoder.geocode( { 'address': address + ', ' + postcode}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        console.log(results[0].geometry.location.lat() + " " +results[0].geometry.location.lng());
      } else {
       this.logError("Error " + status);
      }
    });
  }

问题是,我得到控制台错误,说
uncaughttypeerror:cannotreadproperty'logError'of undefined
,但是这个函数工作得非常好,从代码中的其他地方以相同的方式调用,这使得我在
this.logError(“error”+status)中看到
this
引用谷歌地图api,而不是我的类。我怎样才能解决这个问题?有没有一种方法可以实现类似于
MyClassName.logError(“Error”)
(尝试了这个,不起作用)

您应该使用一个arrow函数,
this
关键字将是组件的关键字,而不是回调函数的关键字。诸如此类:

geocoder.geocode( { 'address': address + ', ' + postcode}, (results, status) => {
  if (status == google.maps.GeocoderStatus.OK) {
    console.log(results[0].geometry.location.lat() + " " +results[0].geometry.location.lng());
  } else {
   this.logError("Error " + status);
  }
});
在本例中,
logError
是当前类的一个方法

为了向您提供更多详细信息,在函数中使用
this
关键字时,它对应于在其上执行函数的对象:

// Example #1

function test() {
  console.log(this);
}

test(); // prints null

// Example #2

var obj2 = {
  test: function() {
    console.log(this);
  }
};

obj2.test(); // prints obj2

// Example #3

var obj3 = {
  test: function() {
    console.log(this);
  }
}

var fct3 = obj3.test;
fct3() // prints null!!

// Example #4

var obj4 = {
  test: function() {
    geocoder.geocode({ ... }, function(results, status) {
      console.log(this);
    });
  }
};

obj2.test(); // doesn't print obj2
当您提供回调时,它将作为上下文或特定上下文(而不是调用方上下文)在任何对象之外的函数执行。这意味着在回调中,
This
关键字对应于执行回调的上下文,当然,它不是组件实例

这是JavaScript应用程序中的一个常见问题。箭头函数不是经典函数,它引入了“词法this”的概念。这意味着他们不使用自己的
This
,而是使用调用者提供的:

var obj2 = {
  test: function() {
    geocoder.geocode({ ... }, (results, status) => {
      console.log(this);
    });
  }
};

obj2.test(); // prints obj2
此链接可以帮助您:。请参阅“功能:词法范围”

希望它能帮助你,
Thierry

您应该使用一个箭头函数,
this
关键字将是组件的关键字,而不是回调函数的关键字。诸如此类:

geocoder.geocode( { 'address': address + ', ' + postcode}, (results, status) => {
  if (status == google.maps.GeocoderStatus.OK) {
    console.log(results[0].geometry.location.lat() + " " +results[0].geometry.location.lng());
  } else {
   this.logError("Error " + status);
  }
});
在本例中,
logError
是当前类的一个方法

为了向您提供更多详细信息,在函数中使用
this
关键字时,它对应于在其上执行函数的对象:

// Example #1

function test() {
  console.log(this);
}

test(); // prints null

// Example #2

var obj2 = {
  test: function() {
    console.log(this);
  }
};

obj2.test(); // prints obj2

// Example #3

var obj3 = {
  test: function() {
    console.log(this);
  }
}

var fct3 = obj3.test;
fct3() // prints null!!

// Example #4

var obj4 = {
  test: function() {
    geocoder.geocode({ ... }, function(results, status) {
      console.log(this);
    });
  }
};

obj2.test(); // doesn't print obj2
当您提供回调时,它将作为上下文或特定上下文(而不是调用方上下文)在任何对象之外的函数执行。这意味着在回调中,
This
关键字对应于执行回调的上下文,当然,它不是组件实例

这是JavaScript应用程序中的一个常见问题。箭头函数不是经典函数,它引入了“词法this”的概念。这意味着他们不使用自己的
This
,而是使用调用者提供的:

var obj2 = {
  test: function() {
    geocoder.geocode({ ... }, (results, status) => {
      console.log(this);
    });
  }
};

obj2.test(); // prints obj2
此链接可以帮助您:。请参阅“功能:词法范围”

希望它能帮助你, 蒂埃里