请问一下, function 包含了 function, 这是什么结构? ShowEntity和onGetEntityComplete函数有什么关联? 如果调用ShowEntity时, 下面是怎么执行的?function ShowEntity(layerName,layerType,id)
{
    MapControl1.GetEntity(MapControl1.mapName,layerName,parseInt(id),onGetEntityComplete,onError);    function onGetEntityComplete(entity)
    {
        if(entity!=null&&entity.shape!=null){
            var pointsX = new Array();
            var pointsY = new Array();
            for(var i=0;i<entity.shape.points.length;i++){
                pointsX.push(entity.shape.points[i].x);
                pointsY.push(entity.shape.points[i].y);
            }
            if(layerType == SuperMap.IS.LayerType.line){
                MapControl1.CustomLayer.RemoveMark("er");
                MapControl1.CustomLayer.RemovePolygon("er");
                MapControl1.CustomLayer.InsertLine("er",pointsX,pointsY,2,"red",1); 
            }
            if(layerType == SuperMap.IS.LayerType.polygon){
                MapControl1.CustomLayer.RemoveMark("er");
                MapControl1.CustomLayer.RemoveLine("er");
                MapControl1.CustomLayer.InsertPolygon("er", pointsX, pointsY, 2, "blue", "white", 0.6,1);
            } 
            //清空一下
            while(pointsX.length>0)
            {
               pointsX.pop();pointsY.pop();
            }
            pointsX = null;
            pointsY = null;      
        }
    }
}

解决方案 »

  1.   

    内部函数,调用ShowEntity时,只会生效MapControl1.GetEntity这一句。后面只是函数的声明,并没调用
      

  2.   

    onGetEntityComplete是在MapControl1.GetEntity里调用的 估计是回调函数什么的 
    onGetEntityComplete放在ShowEntity里定义的话 外面就无法使用onGetEntityComplete了 
      

  3.   

    MapControl1.GetEntity(MapControl1.mapName,layerName,parseInt(id),onGetEntityComplete,onError);这儿调用的!只有当前函数内可以调用
      

  4.   


    这到底跟OOP有神马关系呢?只是把一个函数作为另一个函数的参数传递而已,估计“onError”也是这样的一个东东。可以直接匿名写成:
    function ShowEntity(layerName,layerType,id)
    {
      MapControl1.GetEntity(MapControl1.mapName, layerName, parseInt(id), function(entity){
       if(entity!=null&&entity.shape!=null)......}, onError);

      

  5.   

    6楼的意思估计是想说函数也是一种对象
    楼主的代码等价于
    function ShowEntity(layerName,layerType,id)
    {
        var onGetEntityComplete=function(entity)
        {
            if(entity!=null&&entity.shape!=null){
                var pointsX = new Array();
                var pointsY = new Array();
                for(var i=0;i<entity.shape.points.length;i++){
                    pointsX.push(entity.shape.points[i].x);
                    pointsY.push(entity.shape.points[i].y);
                }
                if(layerType == SuperMap.IS.LayerType.line){
                    MapControl1.CustomLayer.RemoveMark("er");
                    MapControl1.CustomLayer.RemovePolygon("er");
                    MapControl1.CustomLayer.InsertLine("er",pointsX,pointsY,2,"red",1); 
                }
                if(layerType == SuperMap.IS.LayerType.polygon){
                    MapControl1.CustomLayer.RemoveMark("er");
                    MapControl1.CustomLayer.RemoveLine("er");
                    MapControl1.CustomLayer.InsertPolygon("er", pointsX, pointsY, 2, "blue", "white", 0.6,1);
                } 
                //清空一下
                while(pointsX.length>0)
                {
                   pointsX.pop();pointsY.pop();
                }
                pointsX = null;
                pointsY = null;      
            }
        }
    MapControl1.GetEntity(MapControl1.mapName,layerName,parseInt(id),onGetEntityComplete,onError);
    }