They are dynamic and late-bound, for starters. Ruby always supported the notion of methods as message handlers. JavaScript added some support for that in ES6.
Which seems to make for monkey patching and a more brittle programming model. Just because Java is not "true" OOP, doesn't mean it's worse. As a matter of fact, it seems better than most golang (which seems happy not to call themselves OOP) code laying around with no notion of proper structure or way to cleanly navigate the codebase.
How is a Ruby/JavaScript object different from a Java one?