The addition of Object.getPrototypeOf in JavaScript 1.8.1 reminded me of John Resig’s Object.getPrototypeOf implementation that uses constructor
property even if it has been modified. If the constructor property has been modified, it can be reset by deleting the property. An easy way to detect if a property like constructor
has been modified is check if the object’s hasOwnProperty
method returns true when passed "constructor"
. This could have been modified too, so the safest bet it to call Object.prototype.hasOwnProperty
. Though the thing is, you can’t even trust that, so you just have to assume that it isn’t function hasOwnProperty() false;
.
Now I bet you’re wondering, why I should go through all this trouble to check if the constructor
property is modified. This is because just storing the constructor, then deleting, checking, and restoring it will set the constructor
property if it wasn’t already set, which can mess with iterators. Of course you could just delete it and hope that if it was set, it wasn’t important, but that won’t always end up well.
You can download my implementation at gist.github.com/154398.