2016-12-13 9 views
2

オブジェクトには3つのメソッドがあります。JavaScriptオブジェクトのプロトタイプ関数

2つが正しく動作し、3番目が印刷されると、コード自体が印刷され、機能は印刷されません。ここでは、コードで、どのようにコンソールになります。

function Students(name, lastname, grades){ 
 
    this.name = name; 
 
    this.lastname = lastname; 
 
    this.grades = grades; 
 
    this.addGrade = function(a){ 
 
     this.grades.push(a); 
 
    } 
 
    this.printData = function(){ 
 
     console.log("Name: " + this.name); 
 
     console.log("Grades: " + this.grades); 
 
     console.log("Average: " + this.gradeAvg); 
 
    } 
 
    this.gradeAvg = function(){ 
 
     console.log("blabla"); 
 
    } 
 
} 
 

 
var StudentasA = new Students("Petras", "Petrauskas", [8, 9, 9, 8, 7]); 
 
var StudentasB = new Students("Jurgis", "Jurgauskas", [6, 7, 5, 4, 9]); 
 
StudentasA.printData(); 
 
StudentasA.addGrade(28); 
 
StudentasA.printData();

コンソール:

console view

+1

関数を呼び出す必要があります。 – SLaks

答えて

1

あなたは、あなたが実際にプロトタイプを使用していない

this.gradeAvg() 
//   ^^ 

function Students(name, lastname, grades){ 
 
    this.name = name; 
 
    this.lastname = lastname; 
 
    this.grades = grades; 
 
    this.addGrade = function(a){ 
 
     this.grades.push(a); 
 
    } 
 
    this.printData = function(){ 
 
     console.log("Name: " + this.name); 
 
     console.log("Grades: " + this.grades); 
 
     console.log("Average: " + this.gradeAvg()); 
 
     //          ^^ 
 
    } 
 
    this.gradeAvg = function(){ 
 
     return this.grades.reduce(function (a, b) { return a + b; })/this.grades.length; 
 
    } 
 
} 
 

 
var StudentasA = new Students("Petras", "Petrauskas", [8, 9, 9, 8, 7]); 
 
var StudentasB = new Students("Jurgis", "Jurgauskas", [6, 7, 5, 4, 9]); 
 
StudentasA.printData(); 
 
StudentasA.addGrade(28); 
 
StudentasA.printData();

1

あなたのコードが実際に関数を呼び出すことはありません。

代わりに、関数自体を直接文字列に連結します。

括弧が必要です。

関連する問題