【问题标题】:why does this keep saying it's not definied [closed]为什么这一直说它没有定义[关闭]
【发布时间】:2016-09-27 17:16:55
【问题描述】:

使用萤火虫一直说 this.speak 没有定义,我不明白为什么会这样。我正在尝试将其输出到屏幕

 $(document).ready (function() {


    function person(rank, number, id) {
        //properties
        this.intRank = rank;
        this.intNumber = number;
        this.strId = id;
        this.elOutput = document.getElementById(id);
        //methods
        this.speak = fucntion(); {
            this.elOutput.innerHTML += "<br>" + this.strId;
        };

        //adds one to int number and speaks message
        this.pickUpNumber = function() {
            this.intNumber++;
            this.strId = "i have" + this.intNumber.toString() + "rocks";
            this.speak();
        };
    };

    //object

    var Jak = new person(5, "hey ,jack", " Captain");
    var Cap = new person(3, "yea cap?", "jacko");

    jak.speak(); cap.speak(); jak.pickUpRock();

});

【问题讨论】:

  • 错字this.speak = fucntion ==> function
  • fucntion 之后的分号也放错了位置,您的 Jak 和 Cap 变量应该像在声明后的方法调用中一样小写。
  • 请记住,在 javascript this.speak = function(); 后面紧跟分号,在定义之前终止您的函数语句。因此它将永远是undefined
  • @element11:这实际上是一个语法错误。代码甚至不会被执行。
  • 您的代码有语法错误。它根本无法运行。如果代码甚至没有执行,调试器如何告诉你this.speak 是undefined?

标签: javascript function object methods


【解决方案1】:
this.speak = fucntion(); {
  this.elOutput.innerHTML += "<br>" + this.strId;
};

我想你的意思是 function()

而且 JS 是区分大小写的。

这可能是你试图完成的:

$(document).ready (function() {
    function person(rank, number, id) {
      //properties
      this.intRank = rank;
      this.intNumber = number;
      this.strId = id;
      this.elOutput = document.getElementById(id);


      //methods
      this.speak = function() {
        this.elOutput.innerHTML += "<br>" + this.strId;
      };

      //adds one to int number and speaks message
      this.pickUpNumber = function() {
        this.intNumber++;
        this.strId = "i have" + this.intNumber.toString() + "rocks";
        this.speak();
      };
    }

    //object

    var jak = new person(5, "hey ,jack", " Captain");
    var cap = new person(3, "yea cap?", "jacko");

    jak.speak(); cap.speak(); jak.pickUpNumber();
});

结帐this工作jsbin

【讨论】:

  • 这应该是一个编辑
  • @Lux 不,这就是答案。在其他一些错别字中。
  • 如果这真的是问题所在,调试器怎么能说this.speak 是undefined?如果出现语法错误,代码甚至无法执行。
  • 不是语法错误。他是说 this.speak 应该被定义为函数 fucntion(),他可能已经在别处定义了自己。如果他没有,但后面的分号,那么它就会发现错误。
  • @Worthy7——虽然 OP 有可能创建了函数 function fucntion(){...} 或 var fucntion = function(){...},但可能性极小。同样,jak.speak 应该抛出一个引用错误,因为 jak 没有定义,但没有报告。
猜你喜欢
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 2021-11-06
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多