Podając ciąg znaków classname
, chcę dynamicznie utworzyć nową funkcję JavaScript o nazwie następującej po tym ciągu znaków, która może być używana do tworzenia instancji obiektów.Utwórz funkcję JavaScript dynamicznie z nazwy ciągu znaków
Próbowałem już używać eval()
, ale z jakiegoś powodu zadeklarowana funkcja nie pojawia się w zasięgu globalnym (okno).
eval("function " + classname + "() {}");
window[ classname ]; // => undefined
Czy istnieje sposób, w jaki mogę dynamicznie utworzyć nową funkcję o nazwie po ciągu?
Lub alternatywnie, daj mi jakiś sposób, aby odwołać się do utworzonej funkcji po utworzeniu jej przez eval
. Co ciekawe, pojawia się jako zmienna lokalna podczas debugowania jej w Safari.
Aktualizacja:
Got it! Oczywiście to oczywiste, wystarczy użyć eval
ponownie utworzyć instancję:
var myInstance = eval("new " + classname);
myInstance.constructor.name; // => classname (yay)
To powinno działać w moim przypadku, bo wystarczy, aby utworzyć jedną instancję klasy po prawej to zadeklarowana. W ogólnym przypadku zobacz odpowiedź Pointy.
prawda moim jedynym prawdziwym powodem, dla którego chcę to zrobić, jest to, że obiekty pojawiają się jako "classname" w debugerze. :) – devios1