My debugging work in IE ended today by finding that constructor.name
is undefined
.
I created the following simple code that reproduces the issue:
({}).constructor.name === undefined // => true
Is there any workaround to make this work?
Maybe overriding somehow the prototype?
If possible, I don't want to change the syntax, because the change would be major.
Perhaps this example clears up some confusion.
From matt.scharley.me
easy fix without "changing syntax" or polyfill ;)
ES6
ES5 (IE)
The problem is simply that the
name
property of function objects is not supported in Internet Explorer. The property is non-standard (up until ECMAScript 6, at least) so it's not altogether surprising.There isn't a completely reliable workaround so I would suggest trying to do without it if possible. However, you may be able to extract the name from the string representation of the function. Here a couple of links that deal with this that I got from a quick search:
Update
From the comments, it turns out that the goal of the question author is to test whether a variable is a reference to a plain object create by the
Object
constructor. A reliable way of doing this for a variablea
isFor more information I recommend the following page written by Angus Croll:
http://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/
I wrote this for my needs (acknowledging it may not be full-proof):
The regex being performed in the method is making an assumption that the 2nd non-whitespace group of characters IS the name of the constructor. This is a viable solution for the code that I'm working with, while this may not be full-coverage for all others' needs.
This is an improvisation from Oliver's answer.
Instead of using regex, this method will parse the string once and save it to the scope to avoid performance problem if it's called more than once.