Yes, you can manually overwrite the .constructor property of a constructor function's prototype object.
It seems that the constructor property has been changed. Normally you'd probably see something like function Array() { [native code] } instead of [ undefined ].
One thing you can do to verify is...
console.log(typeof [].constructor);
It should give you "function". If it gives you "object", then it's been changed.
Don't trust console output
It seems from a comment that you're testing in Firebug.
As a general rule do not put too much trust in console logging. Consoles are addons to the environment, and must interpret what they've been given to log. Sometimes the interpretation is misleading.
If you get odd results, then perform other tests...
console.log(Array); // [ undefined ] ...huh???
console.log([].constructor); // [ undefined ] ...huh???
typeof [].constructor; // Firebug still gives "function"
[].constructor === Array; // Firebug returns true
So you can see that even though Firebug gave an odd interpretation of the function itself, it doesn't change the fact that it is still the expected Array constructor.
var data = new Array(1, 2, 3); console.log(data.constructor);shows mefunction Array() { [native code] }. Which platform are you using? See the following fiddle.