JavaScript回调函数无法识别命名空间属性或函数

时间:2016-08-19 16:49:33

标签: javascript

我是JavaScript的新手,并且在几个小时之前与它相处得很好,这让我很难过。

我的问题是回调,我不认为我做得对。基本上,在从Init页面调用的App.Map的{​​{1}}上,脚本将加载google地图脚本并执行回调中的代码。一切正常。问题是当我在html函数中单步执行脚本时,load应为location但不是null。但是,如果我使用App.Map.location代替location,则该变量正确且等于null

其次,注释掉的行ClearMarkers();会抛出一个错误,当我单步执行脚本时无法识别它。

我没有做对,这种方式实现回调的正确方法是什么?

命名空间:

var App = App || {};
App.Map = App.Map || {};

App命名空间:

(function(ns) {

    ns.LoadScript = function(url, callback) {

        var script = document.createElement('script');
        script.type = 'text/javascript';

        if (script.readyState) {
            script.onreadystatechange = function() {
                if (script.readyState === 'loaded' ||
                    script.readyState === 'complete') {

                    script.onreadystatechange = null;
                    callback();
                }
            };
        } else {
            script.onload = function() {
                callback();
            }
        }

        script.src = url;
        document.head.appendChild(script);
    };

})(App);

映射命名空间:

(function(ns) {

    ns.position = {
        lat: -34.397,
        lng: 150.644
    };
    ns.location = null;

    var key = '';
    var map;
    var markers = [];

    ns.ClearMarkers = function () {
        if (markers.length !== 0) {
            markers.forEach(function (marker) {
                marker.setMap(null);
            });
            markers = [];
        }
    };

    var load = function () {

        map = new google.maps.Map(document.getElementById('map'), {
            center: this.position
        });

        //ClearMarkers();

        if (location) {
            alert("perform search with this location");
        } else {
            alert("find current location");                
        }
    };

    ns.Init = function (data, options) {

        this.location = data && data.location ? data.location : null;

        App.LoadScript('https://maps.googleapis.com/maps/api/js?key=' + key + '&libraries=places', load);
    };

})(App.Map);

感谢您的帮助,如果问题需要重新加工,请告诉我。

0 个答案:

没有答案