2015-12-08 63 views
-5

使用構造函數和原型,我希望Grade函數將數字等級輸出爲字母等級。Javascript原型

function Grade(name, grade) { 
     this.name = name; 
    } 

    Grade.prototype.grade = function(){ 
     if(grade >= 90){return "A"} 
     else if (grade <90 && grade >=80){return "B"} 
     else if(grade <80 && grade >= 70) {return "C"} 
     else {return "fail"} 
     }; 
var sally = new Grade("Sally", 72); 
console.log(sally.grade()); 
    console.log(sally.name); 
+0

你從來沒有保存過'grade'值,使你的'grade'功能不能使用命名變量未定義的'grade' –

回答

3

需要初始化你傳遞給構造函數的等級,以及你希望提供給新創建的對象的任何其他屬性,而不僅僅是名字。然後將grade方法的名稱更改爲getGrade或您希望避免它被該屬性遮蔽的任何其他名稱。

function Grade(name, grade) { 
    this.name = name; 
    this.grade = grade; 
} 

Grade.prototype.getGrade = function() { 
    if(this.grade >= 90){return "A"} 
    else if (this.grade <90 && this.grade >=80){return "B"} 
    else if(this.grade <80 && this.grade >= 70) {return "C"} 
    else {return "fail"} 
} 

var sally = new Grade("Sally", 72); 
console.log(sally.getGrade()); // C 
console.log(sally.name); // Sally 
+1

您可以刪除'if'語句的部分內容。例如,這個'else if(this.grade <90 && this.grade> = 80){return「B」}'可以是這個'else if(this.grade> = 80){return「B」}'因爲前面的代碼行已經排除了90以上的成績。 – jfriend00

+3

答案應該包含的不僅僅是代碼片段,解釋你已經改變了什麼,以及爲什麼 –

1

或者,它可能是更好的等級邊界移動到一個單獨的對象:任何地方

function Grade(name, score) { 
    this.name = name; 
    this.score = score; 
} 

Grade.boundaries = [ 
    [90, "A"], 
    [80, "B"], 
    [70, "C"] 
]; 

Grade.prototype.grade = function() { 
    var boundary = Grade.boundaries.find(function(boundary) { 
     return this.score >= boundary[0]; 
    }); 

    return boundary ? boundary[1] : "fail"; 
}; 

var sally = new Grade("Sally", 72); 
console.log(sally.grade()); // C 
console.log(sally.name); // Sally