2016-12-15 79 views
0

我學習一個javascript,雖然我是通過它我學習prototyping,所以我嘗試下面的代碼原型在JavaScript

function vehicle(type,year){ 
    this.type="moped"; 
    this.year="2012"; 
} 
Activa=new vehicle; 
console.log(Activa.type); 
console.log(Activa.year); 

function speed(km){ 
console.log(km); 
} 
vehicle.prototype.speed=speed; 
console.log('160km/hr'); 

上面的代碼給了我正確的和正確的輸出

當我試圖它的它的變體光盤它不給我正確的輸出

以下是

function vehicle(type,year){ 
    this.type="moped"; 
    this.year="2012"; 
} 
Activa=new vehicle; 
console.log(Activa.type); 
console.log(Activa.year); 

function speed(km){ 
km="160"; 
console.log(km); 
} 
vehicle.prototype.speed=speed; 
console.log(Activa.speed); 

上面的代碼給了我在Chrome開發者工具以下(SNAP鉻控制檯的鏡頭)輸出

Output in console

什麼錯我在幹嘛?爲什麼它給了代碼我喜歡的圖像輸出我期待輸出爲160

+0

我猜你想做的事'的console.log(Activa.speed());' – sandyJoshi

+0

沒有它給undefrine輸出應爲160 –

+1

你知道一個函數調用的區別和函數引用?另外,你很可能希望你的方法也返回一個值。 – Teemu

回答

3

與您的代碼

  • 括號中console.log(Activa.speed);

  • speed()方法與speed()方法缺少的是不返回任何東西,爲什麼你越來越不確定

試試問題像下面一樣

function vehicle(type, year) { 
 
    this.type = "moped"; 
 
    this.year = "2012"; 
 
} 
 
Activa = new vehicle; 
 
console.log(Activa.type); 
 
console.log(Activa.year); 
 

 
function speed(km) { 
 
    var km = km || "160"; 
 
    console.log(km); 
 
    return km; 
 
} 
 
vehicle.prototype.speed = speed; 
 
console.log(Activa.speed());

  • 還有一個問題是,你正試圖複製在JS類類型的行爲,那麼你應該堅持標準,基函數應該有第一個字符的資本,類似下面 -

function Vehicle(type, year) { 
 
    this.type = "moped"; 
 
    this.year = "2012"; 
 
} 
 
var activa = new Vehicle; 
 
console.log(activa.type); 
 
console.log(activa.year); 
 

 
function speed(km) { 
 
    var km = km || "160"; 
 
    console.log(km); 
 
    return km; 
 
} 
 
Vehicle.prototype.speed = speed; 
 
console.log(activa.speed());

欲瞭解更多詳細信息如下這裏 - http://www.phpied.com/3-ways-to-define-a-javascript-class/

+0

爲什麼你做了這個'km ||「160」;' –

+0

@Maddyplusplus這是一個空檢查。如果你沒有傳遞任何值,它將默認值爲'160'。 –

+0

@如果你想在這種情況下傳遞一些自定義速度,它將覆蓋默認速度'160' – pradeep1991singh

1

這是正常的,

您參考速度SA功能

function speed(km){ 
km=km||"160"; 
return km; 
} 

所以,你應該記錄速度一樣,

console.log(Activa.speed()); 

,而不是像

console.log(Activa.speed); 

,你將有你正確的輸出(160)

+0

but'console.log(Activa.speed());'給出undefine –

+0

不要爲此付諸表決......你可以在這個jsfiddle中看到正確的輸出(160):https: //jsfiddle.net/qj8vfdy0/ –

+2

@GilleQ。你的答案不正確,你沒有返回值,只是記錄它。 –

0

的Activa。速度是一種功能,所以如果你使用

console.log(Activa.speed()); 

它會輸出你期望的。

函數也是javascript中的變量,所以console.log(Activa.speed);輸出變量的內容,在這種情況下是一個函數。