我正在學習從MDN this。 有一個函數「環」如何訪問嵌套forEach外部呼叫者
function loop(){
ctx.fillStyle='rgb(255,200,124,.35)';
ctx.fillRect(0,0,width,height);
while(balls.length<15){
var ball = new Ball();
balls.push(ball);
}
balls.forEach(function(b){
b.draw();
b.update();
b.collisionDetect();
});
requestAnimationFrame(loop);
}
balls
是一個數組,並且在collisionDetect()
有另一種用途的forEach
如下。我要讓this
在collisionDetect()
指呼叫者b
在loop()
Ball.prototype.collisionDetect = function(){
balls.forEach(function(bl){
if(!(this.x===bl.x&&this.y==bl.y
&&this.velX===bl.velX&&this.velY===bl.velY)){
var dx = this.x-bl.x;
var dy = this.y-bl.y;
var distance = Math.sqrt(dx*dx+dy*dy);
if(distance<this.size+bl.size){
bl.color = this.color = "rbg("
+ random(0,255)
+","
+random(0,255)
+","
+random(0,255)
+")";
}
}
});
}
我試圖通過b
作爲collisionDetect()
參數。它確實有效,但不是預期的。
我知道兩個forEach
可以簡單地換成原來的for
循環,但我只是想知道我是否可以使它與forEach
一起工作。
非常感謝大家。
在collisionDetect函數「這個」是等於B。因此,只需在forEach之前將其捕獲到變量中,並在傳遞給forEach的函數內使用該變量即可。 – Robba
我質疑本文使用的OO實踐 - 特別是'collisionDetect'。 「Ball」的一個實例不應該與封閉範圍內的任意變量「balls」有關。呸。這應該是一個「類方法」(在JavaScript的情況下,構造函數的屬性) 'Ball.collisionDetect = function(ball,balls){}' – Damon
@Damon也許作者想讓代碼更容易看到和理解,因爲這是一個絕對的初學者教程:) –