2016-12-01 110 views
0

我已经构建了一个构造函数,并在其原型中添加了3个函数。 当我尝试调用从样机的功能我得到这个错误JavaScript Prototype函数问题

类型错误:未定义是不是一个函数(评估“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); 
+6

如果添加了一一这会甚至工作('SignalFire.prototype.addLogs =功能...')。但是由于你完全替换了整个'原型'对象,所以参考文献被打破了。 – deceze

+0

只需在fireOne.addLogs之前创建对象(8) – user2085143

+0

这是您的代码的顺序。在添加原型之前创建。在原型对象之后放置var fireXXX = new SignalFire()... – epascarello

回答

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);