Я изучаю this из MDN. Существует функция «петли»Как получить доступ к внешнему вызывающему абоненту в гнезде для каждого
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 «это» равно Ь. Поэтому просто запишите его в переменной перед forEach и используйте эту переменную в функции, переданной для forEach. – Robba
Я сомневаюсь в методах OO, используемых в этой статье, а именно 'collisionDetect'. Один экземпляр «Бал» не должен касаться произвольной переменной «шары» из охватывающей области. Тьфу. Это должен быть «метод класса» (в случае javascript - свойство функции конструктора) 'Ball.collisionDetect = function (ball, balls) {}' – Damon
@Damon Возможно, автор хочет сделать код более понятным и понятным, потому что это учебник для абсолютного новичка :) –