使用无括号函数后失去对变量的访问权限

时间:2014-11-10 09:51:18

标签: javascript angularjs angularjs-directive

我正在使用一个angular指令,我在一个点上使用parentheseless语法分配函数scalePoint(带参数)。看来我分配的功能无法访问任何不属于函数范围或作为参数传递的内容。见例:

var Map = (function () {
    function Map(dataService, common, mapboxToken) {
        var _this = this;
        this.map = null;
    }

Map.prototype.initMap = function () {
    var _this = this;
    // Map is initalized, (code omitted)
    dataService.loadData().then(function (data) {
        var geoLayer = L.geoJson(data, {
            pointToLayer: _this.scalePoint // function assigned
        });
    });
};

Map.prototype.scalePoint = function (feature, latlng) {
    var zoom = this.map.getZoom(); // Map is undefined
    return L.circleMarker(latlng, {
        color: "#fff"
    });
};

当我尝试使用我的地图变量时,它是未定义的,我想我可以将地图作为参数传递给scalePoint函数,但我不知道该怎么做。我也想知道它是如何得到" feature"和" latlng",我所知道的是他们是数据的一部分。

2 个答案:

答案 0 :(得分:0)

不应该是这样的:

var Map = function (dataService, common, mapboxToken) {
    var _this = this;
    this.map = null;
}

这样你就会得到错误。

答案 1 :(得分:0)

您可以使用以下内容:

var Map = (function () {
    function Map(dataService, common, mapboxToken) {
        this.dataService = dataService;
        this.common = common;
        this.mapboxToken = mapboxToken;
    }
    Map.prototype.initMap = function () {
        var _this = this;
        // Map is initalized, (code omitted)
        this.dataService.loadData().then(function (data) {
            var geoLayer = L.geoJson(data, {
                pointToLayer: _this.scalePoint
            });
        });
    };

    Map.prototype.scalePoint = function (feature, latlng) {
        var zoom = this.map.getZoom();
        return L.circleMarker(latlng, {
            color: "#fff"
        });
    };
    return Map;
})();

这是有效的JavaScript。在这里,您将Map类包装在自执行函数中,并在原型上添加方法。

但是,map方法中的scalePoint字段仍然未定义,只是因为您没有在其他地方分配它。