功能中的对象不起作用

时间:2018-02-28 03:45:14

标签: javascript html function object

基本上我想练习使用函数和对象来实现通过给出我的名字和圆的半径输出一堆数据的目标。

但是,我不确定是否需要注意变量区域设置,或者是因为我使用了错误的方式来调用函数......它只是没有用。

有人会慷慨地帮助我吗?非常感谢你!



<html>
<head>
	<title>Here is Wei Wu's first in-class assignment~</title>
</head>
<body>
	<script type="text/javascript">
	function getName(){
		var name_answer = prompt("Please enter your first and last name: ");
		return name_answer;

	}
	function getRadius(){
		var radius = Number(prompt("Please enter the radius you want: "));
		return radius;
	}

	function getCircumference() {
		var circumference_answer = 2*3.1415*radius;
		return circumference_answer;
	}

	function getAreaOfTheCircle() {
		areaOfTheCircle_answer = 3.1415*Math.pow(radius,2);
		return areaOfTheCircle_answer;
	}

	function getVolumeOfTheSphere() {
		volumeOfTheSphere_answer = (4/3)*3.1415*Math.pow(radius,3);
		return volumeOfTheSphere_answer;
	}
	function Radius(){
		this.nameOfTheUser = name_answer;
		this.radiusOfTheUser = radius;
		this.circumference = circumference_answer;
		this.areaOfTheCircle = areaOfTheCircle_answer;
		this.volumeOfTheSphere = volumeOfTheSphere_answer;
	}

	getName();
	getRadius();
	getCircumference();
	getAreaOfTheCircle();
	getVolumeOfTheSphere();
	Radius();
	document.write(Radius());
	document.write(Radius.nameOfTheUser/*['radiu']*/);
	document.write(Radius.radiusOfTheUser);
	document.write(Radius.circumference);
	document.write(Radius.areaOfTheCircle);
	document.write(Radius.volumeOfTheSphere);

	</script>
</body>
</html>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

看起来你遇到了上下文问题。例如,您的getName函数:您声明一个变量radiusradius现在只能在该功能“上下文”中访问。在这种情况下,函数的上下文从您的左大括号到关闭大括号的函数存在。在下一个功能中,您尝试将radius传递给Math.pow。这是您收到错误的地方,因为在此上下文中不存在radius。以下是解决此类错误的两种方法:

传递参数

function square (a) {
  return Math.pow(a, 2)  // 'a' exists in this context because 
}                        // it was passed as a parameter above

// Call it like this:
var b = square(2)  //=> 4

设置全局变量

为了使radius对所有范围都可见,请在最高范围内声明:

var radius = 0
var name = ''
var area = 0

// Then declare your functions
function getName () {
  // Notice that we can set name here, because it was declared in a higher scope
  name = prompt('Please enter your first and last name: ')
}

getName()
console.log(name) // again, name is accessible here

我在这里阅读以了解有关使用JavaScript进行范围界定的更多信息:https://www.w3schools.com/js/js_scope.asp

答案 1 :(得分:0)

=代码中的一个问题是name_answerradius等是本地变量。你无法在Radius上访问它。一种选择是,您可以将其设置为全局并删除返回功能。或者正如你所说的&#34;我的老师希望我们使用功能并在另一个功能中调用它&#34;

您只需拨打getName()

中的Radius()和其他功能即可
function Radius(){
    this.nameOfTheUser = getName();
    this.radiusOfTheUser = getRadius();
    this.circumference = getCircumference();
    this.areaOfTheCircle = getAreaOfTheCircle();
    this.volumeOfTheSphere = getVolumeOfTheSphere();
}

=您还必须将Radius初始化为var r = new Radius();,并且可以访问r.radiusOfTheUser等属性

  

new运算符创建用户定义的对象类型或的实例   其中一个具有构造函数的内置对象类型。

Doc:new operator

这是一个有效的代码:

function getName(){
    name_answer = prompt("Please enter your first and last name: ");
    return name_answer;

}

function getRadius(){
    radius = Number(prompt("Please enter the radius you want: "));
    return radius;
}

function getCircumference() {
    var circumference_answer = 2*3.1415*radius;
    return circumference_answer;
}

function getAreaOfTheCircle() {
    var areaOfTheCircle_answer = 3.1415*Math.pow(radius,2);
    return areaOfTheCircle_answer;
}

function getVolumeOfTheSphere() {
    var volumeOfTheSphere_answer = (4/3)*3.1415*Math.pow(radius,3);
    return volumeOfTheSphere_answer;
}

function Radius(){
    this.nameOfTheUser = getName();
    this.radiusOfTheUser = getRadius();
    this.circumference = getCircumference();
    this.areaOfTheCircle = getAreaOfTheCircle();
    this.volumeOfTheSphere = getVolumeOfTheSphere();
}

var r = new Radius();

document.write(r.nameOfTheUser);
document.write(r.radiusOfTheUser);
document.write(r.circumference);
document.write(r.areaOfTheCircle);
document.write(r.volumeOfTheSphere);