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
此链接可以帮助您:。请参阅“功能:词法范围”
希望它能帮助你,
蒂埃里