gpt4 book ai didi

javascript - 如何从方法内部的回调函数访问对象属性?

转载 作者:行者123 更新时间:2023-11-28 12:49:17 25 4
gpt4 key购买 nike

我正在定义这个类:

function GMap(map, marker, geocoder) {
this.map = map;
this.marker = marker;
this.geocoder = geocoder;

this.setMarker = function(address) {
this.geocoder.geocode({'address' : address}, function(results, status) {
map.setCenter(results[0].geometry.location);
marker.setPosition(results[0].geometry.location);
});
}
}

如何从回调函数中访问 GMap 的 mapmarker 属性?

非常感谢。

最佳答案

Function 对象原型(prototype)有一个“apply”方法,您可以使用该方法在函数中设置“this”的上下文。检查 API/代码以了解 geocoder.code 是什么,许多库将通过额外参数为您处理此问题,即:

this.someObj.someFn(params, callback, scope);

在 someFn 中,它将使用与此类似的回调:

callback.apply(scope || window, [callbackArg1, callbackArg2]);

这将使“callback”中的“this”上下文成为“范围”传入的任何内容,或者如果没有传入任何内容,“this”将是窗口的全局上下文。一些 JavaScript 库还提供了一种创建回调函数委托(delegate)的方法,以确保无论最终从何处调用该函数,始终在预期范围内调用该函数。一个例子是 ExtJS's Function.createDelegate

如果您使用的库不提供此内置功能,那么您可以创建一个本地变量以在回调闭包中引用,即:

this.setMarker = function(address) {
var thisGMap = this;
this.geocoder.geocode({'address' : address}, function(results, status) {
thisGMap.map.setCenter(results[0].geometry.location);
thisGMap.marker.setPosition(results[0].geometry.location);
});
}

关于javascript - 如何从方法内部的回调函数访问对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484311/

25 4 0
文章推荐: javascript - 使用 jQuery 获取 html 文档中的链接值?
文章推荐: css - 调整图像宽度但保持相同的高度
文章推荐: html - 在 "absolute"
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com