【问题标题】:Functions inside of an object are not working correctly - Javascript对象内部的函数无法正常工作 - Javascript
【发布时间】:2020-01-15 00:23:26
【问题描述】:

这是我的第一个“程序”或任何你想用 JavaScript 调用的程序。

我需要使用calcAVGcalcGrade这两个函数来修改avgtotalgrade。我无法让calcAVG 函数正常工作。我无法弄清楚为什么该函数不会修改 avgtotal 值。在程序中,我无法修改对象的前 5 个属性(它是用于赋值的)。

console.log 中调用时,calcAVG 函数也有效。那么我有某种语法错误吗?

var student = {
	fullName : 'Amanda Corbin',
	scores : [90,50,88,56,89],
	avg : 0,
	total : 0,
	grade : '',
	
	calcAvg : function(scores,avg,total) {
		for (var i = 0; i < this.scores.length; i++) {
			this.total += this.scores[i];
		}
		this.avg = ( this.total / this.scores.length );
		return (this.avg);
	}
	
	
	 calcGrade : function(avg,grade) {
		
		if (this.avg >=90){
			console.log("grade is A");
			this.grade = 'A';
		} else if (this.avg >= 80 && this.avg <90){
			console.log("grade is B");
			this.grade = 'B';
		} else if (this.avg >= 70 && this.avg <80){
			console.log("grade is C");
			this.grade = 'C';
		} else if (this.avg >= 60 && this.avg <70){
			console.log("grade is D");
			this.grade = 'D';
		} else if (this.avg <60){
			console.log("grade is F");
			this.grade = 'F';
		}
		
		
		return (this.grade);
	}


console.log(student);

console.log(student.calcAvg());
console.log(student.calcGrade());

【问题讨论】:

  • 1. calcAvg 函数 2 后没有逗号。没有关闭 } 以关闭 student。也不需要函数参数;您正在通过this 访问这些字段。您可以删除要返回的值周围的括号。
  • 我无法让 calcAVG 函数正常工作 - 哪里不正确?
  • @jaromanda X 我正在使用 notepad++ 和 chrome 来制作/查看程序。当我使用 console.log(student.calcAvg());我得到 74.6,这是正确的值。我不确定为什么它不适合你。由于 calcAVG 功能不工作,calcGrade 一将不工作。 (我尝试在没有其他功能的情况下直接将其传递给 avg 并让它对我正常工作)。任何人都感谢您的评论

标签: javascript function object


【解决方案1】:

您缺少几个逗号和结束 };

var student = {
  calcAvg: function(scores, avg, total) {

  }, // missing a comma here
  calcGrade: function(avg, grade) {

  }, // missing a comma here
}; // missing a closing bracket here

【讨论】:

  • 如果是这样,在 console.log 中调用时,calcAVG 函数如何工作
  • 抱歉,没有检查功能。也许这有帮助javascript.info/object-methods
  • 感谢您的回复,但我仍然无法正常工作。我什至没有意识到缺少右括号。
【解决方案2】:

如果您将代码放在编辑器上,您会看到一些缺失的部分。比如,}。另一件事是您不需要在这些函数中使用任何参数。您没有将任何参数传递给这些函数。在那里你使用this 关键字。这将选择您的 student 数组的正确属性。

var student = {
	fullName : 'Amanda Corbin',
	scores : [90,50,88,56,89],
	avg : 0,
	total : 0,
	grade : '',
	calcAvg : function() {
		for (var i = 0; i < this.scores.length; i++) {
			this.total += this.scores[i];
		}
		this.avg = ( this.total / this.scores.length );
		return (this.avg);
	},
	calcGrade : function() {
		
		if (this.avg >=90){
			console.log("grade is A");
			this.grade = 'A';
		} else if (this.avg >= 80 && this.avg <90){
			console.log("grade is B");
			this.grade = 'B';
		} else if (this.avg >= 70 && this.avg <80){
			console.log("grade is C");
			this.grade = 'C';
		} else if (this.avg >= 60 && this.avg <70){
			console.log("grade is D");
			this.grade = 'D';
		} else if (this.avg <60){
			console.log("grade is F");
			this.grade = 'F';
		}
		
		
		return (this.grade);
	}

}


console.log(student.calcAvg());
console.log(student.calcGrade());

【讨论】:

    【解决方案3】:

    克里斯在上面的评论中是正确的。

    您的最终代码应如下所示

    var student = {
        fullName : 'Amanda Corbin',
        scores : [90,50,88,56,89],
        avg : 0,
        total : 0,
        grade : '',
    
        calcAvg : function(scores,avg,total) {
            for (var i = 0; i < this.scores.length; i++) {
                this.total += this.scores[i];
            }
            this.avg = ( this.total / this.scores.length );
            return (this.avg);
        },
    
    
         calcGrade : function(avg,grade) {
    
            if (this.avg >=90){
                console.log("grade is A");
                this.grade = 'A';
            } else if (this.avg >= 80 && this.avg <90){
                console.log("grade is B");
                this.grade = 'B';
            } else if (this.avg >= 70 && this.avg <80){
                console.log("grade is C");
                this.grade = 'C';
            } else if (this.avg >= 60 && this.avg <70){
                console.log("grade is D");
                this.grade = 'D';
            } else if (this.avg <60){
                console.log("grade is F");
                this.grade = 'F';
            }
    
    
            return (this.grade);
        }
    }
    
    
    console.log(student);
    
    console.log(student.calcAvg());
    console.log(student.calcGrade());
    

    这是在 coderpad 沙箱 link 上的相同输出(只需复制粘贴上面的代码,您就可以看到输出。

    【讨论】:

    • 如果是这样,在 console.log 中调用时,calcAVG 函数如何工作
    • 感谢您的回复,但我仍然无法正常工作。明天我会问我的教授
    • @JaromandaX 我在上面的答案中附上了工作输出。我希望这会有所帮助。
    • 我不知道您必须调用每个函数才能修改平均值、总计和成绩。我假设当你调用学生对象时,它会运行对象内部的函数。我现在开始工作了!感谢您抽出宝贵时间阅读。
    • @AmandaCorbin 不用担心。乐意效劳!不断尝试和学习?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2018-10-26
    相关资源
    最近更新 更多