Czy istnieje rozwiązanie pozwalające uzyskać nazwę funkcji obiektu?
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) {...}
- nie ma informacji o className
lub ObjectName
. Czy można zdobyć jeden z nich?
javascript
TJR
źródło
źródło
Odpowiedzi:
Pobierz funkcję konstruktora obiektu, a następnie sprawdź jego właściwość name .
Zwraca „myClass”.
źródło
Object
), otrzymasz nazwę pierwszego łącza w tym łańcuchu, a nie nazwę konstruktora użytego do utworzenia obiektu. Weźmy następujący przykład:function Daddy() {}; function Me() {}; Me.prototype = new Daddy; me = new Me;
.me.constructor.name
niespodziewanie wraca'Daddy'
, nie'Me'
.var Foo = function() {};
.> myclass=(function(){}); new myclass
drukujemyclass {}
Przykład:
źródło
function Foo() { return {'foo':'bar'} }; var f = new Foo();
:(Jeśli używasz standardowego IIFE (na przykład z TypeScript)
z góry można opisać prototypy
a następnie użyj pól _fullname i _classname.
funkcja adnotacji tutaj:
JsFiddle
źródło
Jak już na to odpowiedziano, chciałem tylko wskazać różnice w podejściu do uzyskania konstruktora obiektu w JavaScript. Istnieje różnica między konstruktorem a rzeczywistą nazwą obiektu / klasy. Jeśli poniższe elementy zwiększają złożoność Twojej decyzji, być może szukasz
instanceof
. A może powinieneś zadać sobie pytanie „Dlaczego to robię? Czy to naprawdę próbuję rozwiązać?”Uwagi:
Nie
obj.constructor.name
jest dostępny w starszych przeglądarkach. Dopasowywanie(\w+)
powinno spełniać klasy w stylu ES6.Kod:
Wynik:
Kod: https://jsbin.com/wikiji/edit?js,console
źródło
Miałem podobną trudność i żadne z przedstawionych tutaj rozwiązań nie było optymalne do tego, nad czym pracowałem. To, co miałem, to seria funkcji do wyświetlania zawartości w trybie modalnym i próbowałem refaktoryzować ją w ramach definicji jednego obiektu, tworząc funkcje, metody klasy. Problem pojawił się, gdy znalazłem jedną z metod, która utworzyła kilka przycisków nawigacyjnych wewnątrz samego modalu, który używał onClick do jednej z funkcji - teraz jest to obiekt klasy. Rozważyłem (i wciąż rozważam) inne metody obsługi tych przycisków nawigacyjnych, ale udało mi się znaleźć nazwę zmiennej dla samej klasy, przesuwając zmienne zdefiniowane w oknie nadrzędnym. Poszukałem wszystkiego, co pasowałoby do „instancji” mojej klasy, a na wypadek, gdyby było ich więcej,
źródło
Spróbuj tego:
źródło
Wszystko czego potrzebujemy:
źródło