Register jQuery – OOP WP

You are setting your script to be added at the wp_head action. jQuery, along with most other scripts, are loaded as part of the wp_enqueue_scripts action. Care to guess which of those comes first? 😉

Edit This is actually not true. jQuery is loaded as part of wp_default_scripts which does take place before wp_head

I have found this list of the WordPress hook firing sequence to be helpful. It shows that wp_head comes right before wp_enqueue_scripts. This means when your script is running jQuery has not been loaded yet.

Just change your line in your init function:

add_action('wp_enqueue_scripts', array( $this, 'js_scripts' ));

I would also recommend putting the script in an external file and then enqueue-ing it. That way, you can actually specify dependencies (like jQuery) as well as other options..