Есть ли решение, чтобы получить имя функции объекта?
function alertClassOrObject (o) {
window.alert(o.objectName); //"myObj" OR "myClass" as a String
}
function myClass () {
this.foo = function () {
alertClassOrObject(this);
}
}
var myObj = new myClass();
myObj.foo();
for (var k in this) {...}
- нет информации о className
или ObjectName
. Можно ли получить один из них?
javascript
TJR
источник
источник
Ответы:
Получите функцию конструктора вашего объекта, а затем проверьте его свойство name .
Возвращает «myClass».
источник
Object
), вы получите имя первой ссылки в этой цепочке, а не имя конструктора, использованного для создания объекта. Рассмотрим следующий пример:function Daddy() {}; function Me() {}; Me.prototype = new Daddy; me = new Me;
.me.constructor.name
потом неожиданно возвращается'Daddy'
, нет'Me'
.var Foo = function() {};
.> myclass=(function(){}); new myclass
печатаетmyclass {}
Пример:
источник
function Foo() { return {'foo':'bar'} }; var f = new Foo();
:(Если вы используете стандарт IIFE (например, с TypeScript)
Вы могли бы аннотировать прототипы заранее
а затем используйте поля _fullname и _classname.
аннотирующая функция здесь:
JsFiddle
источник
Поскольку на это уже был дан ответ, я просто хотел указать на различия в подходах к получению конструктора объекта в JavaScript. Существует разница между конструктором и фактическим именем объекта / класса. Если следующее усложняет ваше решение, возможно, вы ищете
instanceof
. Или, может быть, вы должны спросить себя: «Почему я это делаю? Это действительно то, что я пытаюсь решить?»Ноты:
obj.constructor.name
Не доступна на старых браузерах. Соответствие(\w+)
должно удовлетворять классам стиля ES6.Код:
Результат:
Код: https://jsbin.com/wikiji/edit?js,console
источник
Я столкнулся с аналогичной трудностью, и ни одно из представленных здесь решений не было оптимальным для того, над чем я работал. У меня была серия функций для отображения содержимого в модальном режиме, и я пытался реорганизовать его в рамках единого определения объекта, создав функции, методы класса. Проблема возникла, когда я обнаружил, что один из методов создал внутри навигационной кнопки несколько кнопок навигации, которые использовали onClick для одной из функций - теперь объекта класса. Я рассмотрел (и продолжаю рассматривать) другие методы для работы с этими навигационными кнопками, но мне удалось найти имя переменной для самого класса путем поиска переменных, определенных в родительском окне. То, что я сделал, - это поиск чего-либо, соответствующего «instanceof» моего класса, и в случае, если их может быть больше одного,
источник
Попробуй это:
источник
Все, что нам нужно:
источник