2017-03-20 70 views
0

我有三個我期望的輸出(第二個測試)中的一個,但無法弄清楚如何得到另外兩個。我也包含下面的測試代碼。我是否需要添加屬性才能生成所需的輸出?

function car(gas, mpg) { 
 
    this.gas = gas; 
 
    if (this.gas <= 0) { 
 
    this.empty = true; 
 
    } 
 
    this.mpg = mpg; 
 
    //this.range = gas * mpg; 
 
    //this.empty = empty; 
 

 
    this.drive = function(miles) { 
 
    this.gas -= miles/this.mpg; 
 
    if (this.gas <= 0) { 
 
     this.empty = true; 
 
    } 
 
    }; 
 

 
    this.fill = function(gallons) { 
 
    if (this.gas <= 0) { 
 
     this.fill = false; 
 
    } 
 
    }; 
 
} 
 
//test code 
 

 
var test = new car(15, 30); 
 
console.log(test.empty); //expected output = false 
 

 
test.drive(500); 
 
console.log(test.empty); //expected output = true 
 

 
test.fill(20); 
 
console.log(test.empty); //expected output = false

+2

該代碼中沒有數組。 –

+0

我已將您的代碼移至* runnable * Stack Snippet,並將'console.log'替換爲'alert'。 –

回答

1

最重要的是,編程是關注關注邏輯和細節。

你不會得到falseempty,如果你從來沒有設置emptyfalse,使你的第一個console.log不工作,因爲你從來沒有設置empty任何東西。

你的第二個console.log確實顯示true因爲drive將其設置爲正確的this.gas <= 0條件true

你的第三個並不是因爲(這是細節進來的地方),你正在設置屬性fill,而不是empty

由於empty只是一個gas狀態的反射,你可以考慮使用一個吸氣所以你不必管理empty可言。在car

Object.defineProperty(this, "empty", { 
    get: function() { 
     return this.gas <= 0; 
    } 
}); 

此外,gas不應該被允許爲負,所以你可能要drive做到這一點:

this.gas = Math.max(0, this.gas - miles/this.mpg); 

...這臺this.gas0,如果你想駕駛太遠。你可能會考慮讓drive算多遠,你居然跑出來的氣體和返回之前去了,所以調用者知道你實際上並沒有駕車到請求......


邊注:壓倒性 JavaScript中的約定是像你的car這樣的構造函數以大寫字母開始:Car

+0

非常感謝這有助於分配! –

0

你缺少與else語句。

function car(gas, mpg) { 
    this.gas = gas; 
    if (this.gas <= 0){this.empty = true;} 
    else{this.empty = false;} 
    this.mpg = mpg; 
    //this.range = gas * mpg; 
    //this.empty = empty; 

    this.drive = function (miles) { 
    this.gas -= miles/this.mpg; 
    if(this.gas <=0) { 
    this.empty = true; 
    }else{ 
    this.empty = false; 
    } 
    }; 

    this.fill = function (gallons){ 
    if (this.gas <=0) { 
    this.fill = false;} 
    else{this.fill = true;} 
    }; 
    } 
+2

而不是'if(condition){value = true; } else {value = false; }',只需使用'value = condition;' –

相關問題