2013-01-18 62 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

相關問題