【问题标题】:Reference Error for property of Javascript ObjectJavascript 对象属性的引用错误
【发布时间】:2010-04-18 12:55:17
【问题描述】:

我在 Google Apps 脚本引擎上用 Javascript 构建了一个对象,每次运行我的脚本时都会收到一个引用错误,提示未定义 uName。

这里是相关代码:

function DataSet()
{
  this.uName = "";
  this.dField = "";
  this.qUrl = "http://api.bfbcs.com/api/pc?players="+uName+"&fields="+dFeilds;
  this.data = "";

  this.dQuery = dQuery;
  this.execQuery = execQuery;

根据我找到的所有来源,我不需要使用关键字 var,当我包含它时,它会引发其他错误。

会发生什么?

谢谢

【问题讨论】:

    标签: javascript google-apps-script


    【解决方案1】:

    嗯,是的,变量uName 没有在您发布的 sn-p 中定义。 dQueryexecQuerydFeilds 都不是(拼写!)。它们是否来自您尚未向我们展示的其他代码?

    有一个 property this.uName,但对象属性与 JavaScript 中的变量完全不同。与 Java 不同,它们不共享命名空间。

    此外,您需要对参数进行 URL 编码。例如:

    this.qUrl = "http://api.bfbcs.com/api/pc?players="+encodeURIComponent(this.uName)+"&fields="+encodeURIComponent(this.dField);
    

    【讨论】:

    • @OP:从 Bob 的观点出发,Javascript 中的 this 与 C、C# 或 Java 等语言中的 this非常不同。不要让相似的名称和(在某些方面)相似的功能欺骗您。除其他事项外,您永远不能像在其他人中那样离开 this,这在 Javascript 中从未假设过。
    • @bobince,谢谢,我进行了适当的更改并更改了 URL。现在一切正常。
    • 在网址中的dField 前面添加了一个缺失的this.
    • 旁白:哪种礼仪更好?更正答案中的小错误或留下评论指出错误并将编辑留给答案作者?
    • 我省略了this,因为我不清楚复数形式的dFeilds 应该与dFeild 相同。你可能是对的! [元:对于小错误,编辑很好......我想我可能倾向于对已经接受的答案进行更多编辑,并在没有接受的答案时发表更多评论,但我无法完全解释。]
    【解决方案2】:

    我不确定您要做什么,但我没有看到您的函数接收这些参数:

    function DataSet(uName,dFeilds,dQuery,execQuery)
    {
      this.uName = "";
      this.dFeild = "";
      this.qUrl = "http://api.bfbcs.com/api/pc?players="+uName+"&fields="+dFeilds;
      this.data = "";
    
      this.dQuery = dQuery;
      this.execQuery = execQuery;
    

    【讨论】:

    • 在我在 W3C 的 Web 上查看的示例中,它们没有为底部的方法传递参数。然而,他们为房产做了,但我在其他地方看到你可以放弃这一点。必须为类指定变量然后指定属性并将变量分配给该属性似乎有点多余......但是可以直接通过类方法更新该属性,让变量只有目的是创建一个定义的内存位置。除非我可以这样做:this.uName = var uName;
    • 声明var 与内存位置无关,它与指定变量所在的块有关。参数自动成为局部变量,因此您无需 var 它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2018-04-25
    • 2014-05-06
    • 2017-05-09
    • 1970-01-01
    相关资源
    最近更新 更多