javascript - 括号中缺少 JS(第 88 行)

标签 javascript syntax-error geogebra

我正在用 JS 编写一个程序,用于检查 GeoGebra 中的相等 Angular 。 这是我的第一个JS代码,我以前使用C#进行游戏编程。 代码是:

var names = ggbApplet.getAllObjectNames();
var lines = new Set();
var angles = new Set();
var groups = new Set();
for(var i=0; i<names.length; i++)
{
if(getObjectType(names[i].e)==="line")
{
lines.add(names[i]);
}
}

for(var i=0;i<lines.size;i++)
{
for(var j=0;j<i;j++)
{

var angle = new Angle(i,j);
angles.add(angle);

}
}

for(var i=0;i<angles.size;i++)
{
    var thisVal = angles.get(i).value;
    var placed = false;
    for(var j=0;j<groups.size;j++)
    {
        if(groups.get(j).get(0).value===thisVal)
        {
        groups.get(j).add(angles.get(i));
        placed = true;
        }
    }
    if(!placed)
    {
    var newGroup = new Set();
    newGroup.add(angles.get(i));
    groups.add(newGroup);
    }
}

for(var i=0;i<groups.size;i++)
{
var list="";
for(var j=0;j<groups.get(i).size;j++)
{
list = list+groups.get(i).get(j).name;
if(j != groups.get(i).size-1)
{
list = list+",";
}
}
var comm1 = "Checkbox[angle_{"+groups.get(i).get(0).value+"},{"+list+"}]";
ggbApplet.evalCommand(comm1);
var comm2 = "SetValue[angle_{"+groups.get(i).get(0).value+"}+,0]";
ggbApplet.evalCommand(comm2);

}



(function Angle (i, j)
{
this.lineA = lines.get(i);
this.lineB = lines.get(j);

this.name = "angleA_"+i+"B_"+j;
var comm3 = "angleA_"+i+"B_"+j+" = Angle["+this.lineA+","+this.lineB+"]";
ggbApplet.evalCommand(comm3);
var val = ggbApplet.getValue(this.name);
if(val>180)
{val = val-180}
this.value = val;
ggbApplet.setVisible(name,false)
});

function Set {
var elm;
this.elements=elm;
this.size=0;
}

Set.prototype.get = new function(index)
{
return this.elements[index];
}

Set.prototype.add = new function(object)
{
this.elements[this.size]=object;
this.size = this.size+1;
}

事实证明,GeoGebra 无法识别 Sets,所以我尝试制作一个 Set 函数。 基本上,它将所有线条收集到一个集合中,计算它们之间的 Angular ,对它们进行分组并制作复选框来触发视觉效果。

GeoGebra 函数可以通过 ggbApplet 调用,原始工作空间命令可以通过 ggbApplet.evalCommand(String) 调用,我使用的工作空间命令是基本的 Checkbox、SetValue 和 Angle 命令。 GeoGebra 命令的语法是:

Checkbox[ <Caption>, <List> ]
SetValue[ <Boolean|Checkbox>, <0|1> ]
Angle[ <Line>, <Line> ]

感谢您的帮助!

最佳答案

简而言之,您遇到的语法错误是由于以下代码行造成的:

function Set {

修复此问题后,new function(index)/new function(object)也会导致问题。

这不是有效的 JS,您可能正在寻找这个:

function Set() {
  this.elements = [];
  this.size = 0;
}

Set.prototype.get = function(index) {
  return this.elements[index];
};

Set.prototype.add = function(object) {
  this.elements[this.size] = object;
  this.size = this.size + 1;
};

注意每个function之前也没有new

我不确定你想通过创建这个 Set 对象来完成什么 - 它看起来像一个用于保存数组及其大小的包装器,类似于在C. 在 JavaScript 中,数组可以自由改变,而不用担心内存。

这是一个未经测试的重构,它删除了 Set 的使用,转而支持 native JavaScript 功能(主要是可变数组):

var names = ggbApplet.getAllObjectNames();
var lines = [];
var angles = [];
var groups = [];

for (var i = 0; i < names.length; i++) {
  if (getObjectType(names[i].e) === "line") {
    lines.push(names[i]);
  }
}

for (var i = 0; i < lines.length; i++) {
  for (var j = 0; j < i; j++) {
    angles.push(new Angle(i, j));
  }
}

for (var i = 0; i < angles.length; i++) {
  var thisVal = angles[i].value;
  var placed = false;
  for (var j = 0; j < groups.length; j++) {
    if (groups[j][0].value === thisVal) {
      groups[j].push(angles[i]);
      placed = true;
    }
  }
  if (!placed) {
    groups.push([angles[i]]);
  }
}

for (var i = 0; i < groups.length; i++) {
  var list = "";
  for (var j = 0; j < groups[i].length; j++) {
    list += groups[i][j].name;
    if (j != groups[i].length - 1) {
      list += ",";
    }
  }

  var comm1 = "Checkbox[angle_{" + groups[i][0].value + "},{" + list + "}]";
  ggbApplet.evalCommand(comm1);
  var comm2 = "SetValue[angle_{" + groups[i][0].value + "}+,0]";
  ggbApplet.evalCommand(comm2);
}

function Angle(i, j) {
  this.name = "angleA_" + i + "B_" + j;
  var comm3 = "angleA_" + i + "B_" + j + " = Angle[" + lines[i] + "," + lines[j] + "]";
  ggbApplet.evalCommand(comm3);

  var val = ggbApplet.getValue(this.name);
  if (val > 180) {
    val -= 180;
  }

  this.value = val;
  ggbApplet.setVisible(name, false);
}

希望这有帮助!

关于javascript - 括号中缺少 JS(第 88 行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34969522/

相关文章:

c# - CSS 样式未应用于 JavaScript 输出的 HTML 元素 - XML/XSLT - ASP.NET - C#

javascript - 我在哪里可以找到高级 jQuery/JavaScript 资源/教程?

javascript - 聚合物在模板内结合功能结果

javascript - 将文本从 C# 插入到 webview - UWP

python - 如果语句无效语法错误

oracle - 调用过程时错误的数量或类型的参数错误

r - 通过R Studio读取功能时找不到对象

javascript - 从多个 geogebra 小程序中提取数据

javascript - 如何在不使用长度函数的情况下创建测量字符串长度的长度函数

java - 新安装的Geogebra打不开(可能是JDK问题)