我正在研究可汗学院的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/

10-12 06:52