2014-11-23 2 views
5

Я хотел бы найти тип объекта Javascipt (имя функции конструктора), но я продолжаю возвращать общий «объект» со всеми методами, которые я пробовал. Я искал в Интернете, и никакой метод Javascript, который я нашел, еще не работает для меня. Он всегда просто возвращает тип конструктора объекта как общий «объект». Тем не менее, это так, глядя на меня, когда я проверяю его на консоли Chrome. Любые идеи, как я могу получить эту информацию в JS?Хром Консоль и Javascript Тип объекта

PS. Я использую Browserify для разделения моего кода, если это имеет значение.

enter image description here

Причина, я думал, что это может быть из-за того, как Browserify нагрузки require код, потому что это выход я получаю от Browserify загруженной функции конструктора:

enter image description here

И вот что я получаю от создания функции конструктора вручную:

enter image description here

Независимо от этого и независимо от того, как я создаю функцию-конструктор var Prey = function() {} vs var Prey = function Prey() {}, инструменты Chrome dev все еще, похоже, знают, что имя функции конструктора было даже тогда, когда Javascript, похоже, не знает. Возможно, это потому, что они могут проверять код на виртуальной машине таким образом, что язык Javascript не имеет доступа, но мне интересно, не хватает ли я чего-то. Кто-нибудь знает о другом способе определения типа экземпляра в Javascript?

+3

Пожалуйста показать, как строится этот объект. – thefourtheye

+0

Кажется, что всякий построенный 'obj' не задал свойство' constructor' правильно. –

+0

@thefourtheye добавил дополнительную информацию о функциях конструктора. Надеюсь, что это лучший контекст. Благодаря! – ootoovak

ответ

1

Prey, которого вы видите, является Prey, когда вы делаете function Prey(){};, таким образом, имя функции Prey. Если вы определяете Prey как var Prey = function(){};, тогда имя функции «";

Так что, в основном, если вы хотите использовать имя функции, вы должны дать своему конструктору имя. var Prey = function Prey(){};

EDIT: или его возможно, что вы сделали изменения этого:

var A = function NAMED(){}; 
var B = function(){}; 
B.prototype = Object.create(A.prototype); 
var o = new B(); 

> o 
< B {}; 

> o.constructor.name 
< "NAMED" 
+0

Объясняет ли это, почему obj.constructor.name - это объект? – arcyqwerty

+0

Но тогда это не будет отображаться как Prey ... Даже если вы установите прототип вручную через 'obj .__ proto__ = Prey.prototype', он установит имя конструктора и консольный дисплей. – arcyqwerty

Смежные вопросы