2013-01-18 59 views
2

这是我的代码,我希望它打印出一个数字,而不是打印出一个数字加上我所有的代码。为什么我的代码不会产生预期的结果?它打印的比我想要的要多

function Employee(salaryJan, salaryFeb, salaryMar){ 
    this.salaryJan = salaryJan; 
    this.salaryFeb = salaryFeb; 
    this.salaryMar = salaryMar; 
} 

var dennis = new Employee(6575, 7631, 8000); 

Employee.prototype.sumAll = function(){ 
    var sum = 0; 
    for (salary in this){ 
     sum += this[salary]; 
    } 
    console.log(sum); 
}; 

dennis.sumAll(); 

目前我的代码打印出:

22206function(){ 
    var sum = 0; 
    for (salary in this){ 
     sum += this[salary]; 
    } 
    console.log(sum); 
} 

我只想22206号,我不知道为什么它还会打印出我的代码。

另外我有一个jsfiddle项目。提前致谢。

http://jsfiddle.net/dennisboys/LZeQr/1/

回答

2

这里的问题:

for (salary in this) 

通过this所有属性这将循环。让我们来看看这些属性:

this.salaryJan 
this.salaryFeb 
this.salaryMar 
Employee.prototype.sumAll 

你已经有了4个属性是你看到越来越打印到控制台的内容。

您应该使用hasOwnProperty方法:

for (prop in this) { 
    if (this.hasOwnProperty(prop)) 
     sum += this[prop]; 
    } 
} 

而且这里有一个live demo

+0

+1你打败了我,我都是玛金'小提琴http://jsfiddle.net/Fp6hM/;) – AlienWebguy

+0

感谢Darin为您的快速回答! – Dennisboys

+0

嗨达林,但如果我的代码是这样的,你的方法不起作用。 http://jsfiddle.net/dennisboys/LZeQr/2/,我该如何解决这个问题? – Dennisboys

相关问题