我正在研究可汗学院的SmileyFace项目。到目前为止,这比我以前做的难。
为什么text命令输出无限循环?输出应为“ Hello”。但正在打印:
"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.");
最佳答案
就在这儿:
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
,则可以完全看到您描述的行为。关于javascript - Khan SmileyFace-无限循环问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37620288/