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.