美文网首页
Cesium使用callbackproperty无报错无效果

Cesium使用callbackproperty无报错无效果

作者: 韩无仙 | 来源:发表于2021-04-22 13:44 被阅读0次

需求

画出动态线,在width设置成10时是这样的效果。


image.png

但我想动态改变线的宽度时,出现错误,且没有报错提示。

      let width = 10;
      let polyline = new Cesium.PolylineGeometry({
        positions: Cesium.Cartesian3.fromDegreesArrayHeights([
          113.2312,
          23.1172,
          5,
          113.2315,
          23.1178,
          5,
          113.2321,
          23.1176,
          5,
        ]),
        width: new Cesium.CallbackProperty(function (time, result) {
           switch (true) {
             case width == 10:
               width += 5;
               break;
             case width > 10:
               width += 3;
               break;
             case width > 20:
               width -= 7;
               break;
             default:
               width = 10;
               break;
           }
          console.log("time:", time, "result:", result, "width:", width);
          return width;
        }, false),
        vertexFormat: Cesium.PolylineMaterialAppearance.VERTEXT_FORMAT,
      });
      this.viewer.scene.primitives.add(
        new Cesium.Primitive({
          geometryInstances: new Cesium.GeometryInstance({
            geometry: polyline,
          }),
          appearance: new Cesium.PolylineMaterialAppearance({
            material: Cesium.Material.fromType(
              Cesium.Material.PolylineGlowType
            ),
          }),
        })
      );

在打断点进入callback函数查看时,发现两条报错

TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them at Function

ES6的模块自动采用严格模式,不管你有没有在模块头部加上"use strict"

严格模式主要有以下限制:

  • 变量必须声明后再使用
  • 函数的参数不能有同名属性,否则报错
  • 不能使用with语句
  • 不能对只读属性赋值,否则报错
  • 不能使用前缀0表示八进制数,否则报错
  • 不能删除不可删除的属性,否则报错
  • 不能删除变量delete prop ,会报错,只能删除属性 selete global[prop]
  • eval 不会在它的外层作用域引入变量
  • eval和arguments不能被重新赋值
  • arguments不会自动反映函数参数的变化
  • 不能使用****arguments.callee
  • 不能使用arguments.caller
  • 禁止this指向全局对象
  • 不能使用fn.caller和fn.arguments获取函数调用的堆栈
  • 增加了保留字(比如protected、static和interface)

上面这些限制,模块都必须遵守。由于严格模式是ES5引入的不属于ES6所以请参阅ES5书籍

其中,尤其需要注意this的限制。ES6模块之中,顶层的this指向undefined,即不应该在顶层代码使用this。

这里最简单也是最重要的答案是 use strict 是一种运行时自动执行更严格的JavaScript代码解析和错误处理的方法。如果代码错误被忽略或失败,将会产生错误或抛出异常。总的来说,这是一个很好的做法。

严格模式的一些主要有点包括:

  • 使调试跟更容易。如果代码错误本来会被忽略或失败,那么现在将会产生错误或抛出异常,从而更快地发现代码中的问题,并更快地指引它们的源代码。

  • 防止意外全局。如果没有严格模式,将指赋值给未声明的变量会自动创建一个具有该名称的全局变量。这是JavaScript中最常见的错误之一。在严格模式下,尝试这样做会引发错误。

  • 消除隐藏威胁。在没有严格模式的情况下,对null或undefined的这个值得引用会自动强制到全局。这可能会导致需要headfakes和pull-out-your-hair类型的错误。在严格模式下,因公用null或undefined的这个值会引发错误。

  • 不允许重复的参数值。严格模式在检测到函数的重复命名参数(例如,函数foo(var1,var2,var1){})时会引发错误,从而捕获代码中几乎可以肯定存在的错误,否则您可能会浪费大量的时间追踪。

  • 注意:它曾经是(ECMAScript 5 中)strict模式将禁止重复的属性名称(例如var object = {foo:“bar”,foo:“baz”};)但是从ECMAScript 2015 开始,就不再有这种情况了。

  • 使eval()更安全。eval()在严格模式和非严格模式下的行为方式有些不同。最重要的是,在严格模式下,在eval()语句内部声明的变量和函数不会再包含范围中创建(它们是以非严格模式在包含范围中创建的,这也可能是问的常见来源)。

  • 抛出无效的使用错误的删除符。删除操作符(用于从对象中删除属性)不能用于对象的不可配置属性,当试图删除一个不可配置的属性时,非严格代码将自动失败,而在这种情况下,严格模式会引发错误

相关文章

  • Cesium使用callbackproperty无报错无效果

    需求 画出动态线,在width设置成10时是这样的效果。 但我想动态改变线的宽度时,出现错误,且没有报错提示。 在...

  • Cesium CallBackProperty 使用的例子

    CallbackProperty 使用的例子

  • Cesium实现淹没分析

    代码思路 Cesium的淹没效果主要使用到的是Cesium库中polygon的extrudedHeight属性。通...

  • cesium-CallbackProperty是干啥的?

    CallbackProperty就是属性回调函数,对于实体来说,比如一条线,如果我想改变其线宽,或者改变其颜色,但...

  • Cesium雾效果

    本文是一个下雾的效果 下雾效果的类代码: 页面使用方式引入上面的js即可 效果图cesium_fog.png

  • Cesium上建立风场动态粒子效果

    初学使用Canvas + NCEP数据创建动态风场效果封装基于Cesium的canvas渲染风场APIgithub...

  • 2020-05-29

    这款瘦身糖果效果真的很好哦!我自己也在使用,效果棒棒哒!无副作用/无反弹/无运动/无效退款需要可以联系我哦!

  • cesium简单封装

    使用cesium简单封装基础功能方便调用简化代码 新建cesium.js 引入cesium cesium地图初始化...

  • 2021-09-28 c

    1.升级到cesium1.85时报错 2.原因分析 由于在 ./node_modules/cesium/Sourc...

  • Cesium绘制轨迹线与轨迹点

    介绍使用primitives创建线条轨迹以及轨迹点以及entities大概介绍 Cesium上建立风场动态粒子效果...

网友评论

      本文标题:Cesium使用callbackproperty无报错无效果

      本文链接:https://www.haomeiwen.com/subject/senxrltx.html