我正在汗学院的SmileyFace项目上工作。这比我迄今为止做的更难。
为什么text命令输出无限循环?输出应该是'你好'。但正在打印:
"function(speak){
__env__KAInfiniteLoopCount++;
if (__env__KAInfiniteLoopCount++<"
......之后还有更多行。
谢谢。这是我的代码:
var SmileyFace = function(centerX,centerY){
this.centerX = centerX;
this.centerY = centerY;
};
SmileyFace.prototype.draw = function() {
fill(255, 234, 0);
ellipse(this.centerX, this.centerY, 150, 150);
fill(0, 0, 0);
ellipse(this.centerX-30, this.centerY-30, 20, 20);
ellipse(this.centerX+30, this.centerY-30, 20, 20);
noFill();
strokeWeight(3);
arc(this.centerX, this.centerY+10, 64, 40,0,180);
};
SmileyFace.prototype.speak = function(speak){
text(this.speak,this.centerX,this.centerY+40);
};
var face = new SmileyFace(200,300);
face.draw();
face.speak("Hello.");
答案 0 :(得分:3)
就在这里:
SmileyFace.prototype.speak = function(speak){
text(this.speak,this.centerX,this.centerY+40);
};
不是将变量 speak
传递给函数text
,而是传递函数 speak
。因此,只需this.speak
而不是speak
。
这就是为什么不要让函数和变量具有相同名称的原因。
如果你看一下this我认为你从哪里获得作业,你会注意到他们如何做到这一点的区别:
SmileyFace.prototype.speak = function(hey) {
fill(255, 0, 174);
text(hey,this.centerX-4, this.centerY+100);
};
他们传递了hey
这个参数text
(为了避免混淆,并没有与函数同名! - 但是有点像一个愚蠢的名字......)到this.speak
函数。如果您将其更改为dog
cat
cow
,您会看到您所描述的行为。