Я провел 10 или 20 минут здесь и там, вероятно, дюжину раз в прошлом году и так и не нашел пуленепробиваемого ответа на этот вопрос.
Как вы проверяете, является ли объект JavaScript экземпляром Object
, а не подклассом?
Одним из вариантов использования является проверка того, является ли arguments[0]
хешем "опций" и "модель" (MVC), оба из которых расширяют собственный Object
, но с ним следует обращаться по-разному.
Я пробовал эти:
// 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
То, что klassName(m.constructor)
не работает в некоторых случаях (точно не помню, но может быть, regex.constructor, что-то вроде этого). Возможно, это так, не знаю точно.
Есть ли пуленепробиваемый способ узнать, является ли что-то объектом {}
?