为什么我的代码不能产生预期的结果?它的打印效果超出了我的想象

时间:2013-01-18 06:44:15

标签: javascript

这是我的代码,我希望它打印出一个数字,而不是打印出一个数字加上我的所有代码。

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/

1 个答案:

答案 0 :(得分: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