mw.Uri.clone() copies each property individually, but it doesn't make a deep copy of the properties; almost all properties are simple types where it doesn't matter, but query is an object.
What's funny is that this breaks the example in the class documentation:
var a = new mw.Uri('http://localhost/w/index.php?foo=bar')
var b = a.clone()
a.extend({'baz':'quux'})
a.toString()
"http://localhost/w/index.php?foo=bar&baz=quux"
b.toString()
"http://localhost/w/index.php?foo=bar&baz=quux"
Version: unspecified
Severity: normal