How do you check if a JavaScript object is directly an `{}` instance, not a subclass?
javascript
Solution
Might something as simple as
function isObj( test ) {
return test.constructor === Object;
}
Be what you are looking for?
Test in jsFiddle
Problem
I have spent 10 or 20 minutes here and there probably a dozen times in the past year and never found a bulletproof answer to this question. How do you check if a JavaScript object is an instance of `Object`, not a subclass? One use case for this is to check if `arguments[0]` is an "options" hash vs. a "model" (MVC), both of which extend the native `Object`, but which should be treated differently. I have tried these: ``` // some helper to get constructor name function klassName(fn) { if (fn.__name__) { return fn.__name__; } if (fn.name) { return fn.name; } return fn.toString().match(/\W*function\s+([\w\$]+)\(/)); }; var Model = function() {}; m = new Model; o = {}; Object(o) === o; // true Object(m) === m; // true, thought it might be false klassName(o.constructor); // Object klassName(m.constructor); // Model ``` That `klassName(m.constructor)` doesn't work in some cases (can't remember exactly, but maybe a regex.constructor, something like that). Maybe it does, don't know for sure. Is there a bulletproof way to tell if something is an `{}` object?