2016-12-01 13 views
0

私はConstructorを構築し、そのプロトタイプに3つの関数を追加しました。 私はプロトタイプから関数を呼び出すしようとすると、私はこのエラーを取得JavaScriptプロトタイプ関数

例外TypeError:未定義の関数ではありません(評価「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 =機能...')。しかし、 'prototype'オブジェクト全体を完全に置き換えるので、参照は壊れています。 – 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);

関連する問題