JavaScript的作用域错误
JavaScript wrong scope
我混淆了JS范围。我试图将值分配给坐标,然后再使用它们,但由于某种原因,我总是将坐标设为null。
var thing = (function($){
var obj = function(config) {
$.extend(obj.config, config);
obj.init();
};
$.extend(obj, {
coordinates: {},
browser_geolocation: function() {
if (navigator.geolocation) {
var timeoutVal = 10 * 1000 * 1000;
navigator.geolocation.getCurrentPosition(
obj.browser_coordinates, //set coordinates
maps.browser_error,
{ enableHighAccuracy: true, timeout: timeoutVal, maximumAge: 0 }
);
}
else {
alert("Geolocation is not supported by this browser");
}
},
browser_coordinates: function(position) {
obj.coordinates.long = position.coords.longitude;
obj.coordinates.lat = position.coords.latitude;
},
});
$(function() {
maps.browser_geolocation();
maps.browser_geolocation();
console.log(obj.coordinates);
});
return obj;
}(jQuery));
我似乎不明白我做错了什么?
这里有两个主要问题:
- navigator.geolocation.getCurrentPosition是异步的
- 未定义(或未包含在示例中)的变量
您可能想研究JavaScript中的原型继承,它并不像看上去那么难。
下面是一个如何创建利用回调的可自定义对象的示例:
function GetCoordinates(callback) {
var successCallback = function (position) {
this.coordinates = position.coords;
callback();
};
var errorCallback = function (error) {
throw error;
};
var self = this;
if (navigator.geolocation) {
var timeoutVal = 10 * 1000 * 1000;
navigator.geolocation.getCurrentPosition(function () {
successCallback.apply(self, arguments)
}, errorCallback, {
enableHighAccuracy: true,
timeout: timeoutVal,
maximumAge: 0
});
}
}
(function() {
// callback to execute once coordinates are ready
var myCallback = function() {
console.log(c.coordinates); // Coordinates
};
// create object (don't forget new :))
var c = new GetCoordinates(myCallback);
// because geolocation.getCurrentPosition is async, the following will be undefined
console.log(typeof c.coordinates);
}());
相关文章:
- Node.js作用域错误
- 如果在transclusion之后添加,为什么指令下的动态元素具有错误的作用域
- 将“*”分配给作用域中声明的变量的角度错误
- Javascript setTimeout作用域引用了错误的变量
- AngularJS指令作用域未解析(“属性名称未定义”错误)
- 从另一个文件调用时出现Javascript作用域错误
- AngularJS = 作用域中的 = 作用域导致解析语法错误
- KnockoutJS:函数作用域错误
- JavaScript的作用域错误
- AngularJS ng控制器指令不接受javascript中的变量(作用域函数),也不给出任何错误
- JavaScript/jQuery变量作用域导致错误
- NodeJS-本地作用域已关闭(致命错误)
- 使用Backbone.js时出现作用域错误
- Javascript变量作用域问题-错误:类型错误:this.graphics未定义
- Javascript中的作用域错误.调用该对象的不同方法中的方法
- 将输入字段值传入angularjs $resource undefined,错误显示未知的作用域提供商
- SetInterval调用时严格模式作用域错误
- 无法通过JavaScript访问变量-作用域错误
- AngularJS -当触发器变量在作用域中改变时,我的错误消息不会更新
- 内部函数无法访问外部函数的作用域,导致无法读取属性toString()的未定义错误