2016-12-15 142 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);输出变量的内容,在这种情况下是一个函数。