вызовите метод-прототип javascript из другого

вызовите метод-прототип javascript из другого

С вашим текущим кодом вы можете просто сделать это:

 var p = new Particles(); p.physicsStep(); 

И затем внутри physicsStep() он соответствующим образом выполнит this.computeForces() и this.integrationStep() и this будет указатель на объект p который был создан в первой строке кода выше.

Значение this определяется тем, как метод / функция вызывается, как описано здесь, поэтому, если у вас возникают проблемы со значением this , проблема, скорее всего, не в самом методе, а в том, как он вызывается.

Если вам нужна помощь с этой частью вашего кода, то можете добавить этот код в свой вопрос и позвольте нам взглянуть.

Рабочий пример: http://jsfiddle.net/jfriend00/yuxppyyf/


Да, вы правы, одна проблема связана с тем, как вы используете setInterval.

Вы можете изменить это:

 window.setInterval(particles.physicsStep, 1000 * particles.dt); 

к этому:

 window.setInterval(particles.physicsStep.bind(particles), 1000 * particles.dt); 

Когда вы передаёте в качестве ссылки на другую функцию particles PhysicsStep, particles теряется. Все, что передается, это ссылка на метод physicsStep поэтому, когда setInterval затем вызывает его, он вызывается как обычная функция, а не как метод вашего объекта.

Это распространенная ошибка в Javascript, и есть несколько способов решить эту проблему. Я показал использование .bind() выше. Вы также можете сделать свою собственную маленькую функцию-заглушку (что, по сути, и делает для вас .bind() ) следующим образом:

 window.setInterval(function() { particles.physicsStep(); }, 1000 * particles.dt); 

Это гарантирует, что physicStep() вызывается на нужном объекте.

К вашему сведению, похожая проблема и ответ здесь: Как заставить обратный вызов работать с «этим» в области видимости

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector