我有一个奇怪的情况。就在最近,由于上一个问题,我一直在尝试将一些代码从程序更改为基于对象。
我在代码中有几个地方调用函数中的函数(请原谅,我仍在学习 Javascript 的术语),因此“this”具有不同的范围。
在试图保持与父“this”的连接时,我试图通过将“thisObj = this”添加到函数调用中来将变量传递给函数,如下所示
geoLoc: function () {
"use strict";
var thisObj;
if (navigator.geolocation !== undefined) {
navigator.geolocation.getCurrentPosition(function (position) {
thisObj.calcRoute('driving', position.coords.latitude + ', ' + position.coords.longitude, true);
}, thisObj = this);
}
},
所以,这适用于 FF,所以我认为它一定没问题。用 jslint 检查,一切都变成绿色(或黄色/蓝色),看不到任何错误。
然而,Chrome 决定存在“不匹配 dom 异常 17”并决定不使用地理位置。
碰巧,我尝试移动该定义,使其读作
geoLoc: function () {
"use strict";
var thisObj;
if (navigator.geolocation !== undefined) {
navigator.geolocation.getCurrentPosition(function (position) {
thisObj.calcRoute('driving', position.coords.latitude + ', ' + position.coords.longitude, true);
}), thisObj = this;
}
},
令我惊讶的是,它在 FF 和 Chrome 中都有效。不幸的是,它在 jslint 中失败了,而 IE 只是踢了它的脚跟而死了。
现在,我的问题是,我到底做了什么让它与 FF 一起运行并通过 jslint 以及如何在不诉诸于在第二个函数中实际命名对象的情况下纠正这种情况,所以我可以通过对它的引用。
请不要jquery。直接的javascript。比修复它的代码更重要的是,解释一下我实际上做了什么……如果可能的话,请用外行的话,所以我可以进一步调查。