Khan SmileyFace - 无限循环麻烦

时间:2016-06-03 17:26:31

标签: javascript loops

我正在汗学院的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.");

1 个答案:

答案 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 ,您会看到您所描述的行为。