簡體   English   中英

在for循環中覆蓋函數

[英]Overwrite function inside a for loop

我正在開發一個OpenLayers應用程序,它可以對矢量層進行動態分類。 因此,我試圖遍歷特定數量的主題類(類別),並為內部的每個類定義一個過濾器。

一個名為OpenLayers.Filter.Function的OpenLayers對象代表每個過濾器。 每個OpenLayers.Filter.Function都會覆蓋OpenLayers類的評價()函數。

我的代碼如下所示:

var rules = new Array();

for (var i = 0; i < numClasses; i++) {
    filter_x = function() {
    return new OpenLayers.Filter.Function({
            evaluate: function(attributes) {
                // some code to define the filter
                // uses specific values: array[i] & array[i+1
    }
    var rule_x = new OpenLayers.Rule({
        filter: filter_x,
        symbolizer: { fillColor: colors[i],
                    fillOpacity: 0.5, strokeColor: "white"}
    });
    rules.push(rule_x);
}
thematicStyle.addRules(rules);

不幸的是,這不起作用。 似乎所有過濾器都執行最后一個循環的評價()函數。

你有什么想法?

您正在對可變的 i進行封閉,也就是說,對於所有規則,最后i的值將相同,即numClasses - 1 i是相同的變量,所有迭代都共享。 在循環體內不會創建任何副本。

這是正確的方法:

var rules = new Array();

for (var i = 0; i < numClasses; i++) (function (i) {
    filter_x = function() {
    return new OpenLayers.Filter.Function({
            evaluate: function(attributes) {
                // some code to define the filter
                // uses specific values: array[i] & array[i+1
    }
    var rule_x = new OpenLayers.Rule({
        filter: filter_x,
        symbolizer: { fillColor: colors[i],
                    fillOpacity: 0.5, strokeColor: "white"}
    });
    rules.push(rule_x);
})(i);
thematicStyle.addRules(rules);

在Javascript的未來版本中,您可以在for循環中let j = i ,但是現在,您仍然受這些語義的限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM