【问题标题】:JavaScript Prototype function IssueJavaScript 原型函数问题
【发布时间】:2016-12-01 13:59:56
【问题描述】:

我已经构建了一个构造函数并在其原型中添加了 3 个函数。 当我尝试从原型调用一个函数时,我得到了这个错误

TypeError: undefined is not a function (evalating 'fireOne.addLogs(8)')

请有人告诉我我做错了什么。我想不通。

提前致谢

 function SignalFire(ID, startingLogs){
   this.fireID = ID;
   this.logsLeft = startingLogs;
 }


 var fireOne = new SignalFire(1, 20);
 var fireTwo = new SignalFire(2, 18);
 var fireThree = new SignalFire(3, 24);




 SignalFire.prototype = {

   addLogs: function(numLogs){
     this.logsLeft += numLogs;
   },


   lightFire: function(){
     alert("Whoooooosh!");
   },

   smokeSignal: function(message) {
     if (this.logsLeft < this.message.length / 10){
       alert("Not enough fuel to send " +
       "the current message!");
     }

     else {
       this.lightFire();
       var x = this.message.length;
       for(var i = 0; i < x; i++){
         alert("(((" + this.message[i] + ")))");
         if (i % 10 === 0 && i !== 0){
           this.logsLeft--;
         }
       }
     }
   }

 };

 fireOne.addLogs(8);

【问题讨论】:

  • 如果你一个一个添加它们,这甚至可以工作 (SignalFire.prototype.addLogs = function ...)。但是由于您要彻底替换整个 prototype 对象,因此引用已损坏。
  • 在你的 fireOne.addLogs(8) 之前创建你的对象
  • 这是你代码的顺序。在添加原型之前创建。将 var fireXXX = new SignalFire() 放在原型对象之后...

标签: javascript prototype


【解决方案1】:

问题是您的代码顺序。创建后添加内容。如果在创建火灾之前添加原型,它将起作用。

function SignalFire(ID, startingLogs){
   this.fireID = ID;
   this.logsLeft = startingLogs;
 }

 SignalFire.prototype = {
    addLogs: function(numLogs){
     this.logsLeft += numLogs;
     console.log(this.logsLeft);
   }
 };

 var fireOne = new SignalFire(1, 20);
 fireOne.addLogs(8);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多