Как получить имя класса при запуске функции конструктора в duktape?
Я хотел бы использовать одну функцию конструктора duktape/C в качестве диспетчера для таких вызовов. Когда вызывается функция диспетчера, мне нужно знать, для какого класса это происходит, чтобы вызвать соответствующую конструкторскую функцию C++.
Я думаю, this
привязка не поможет, поскольку она представляет (еще не полностью инициализированный) объект JS, который мы здесь создаем.
Другой вариант - текущая функция, но из документов я не вижу, как получить имя класса из этого. Что еще я мог использовать?
1 ответ
Не могли бы вы уточнить, что вы подразумеваете под "именем класса"? Вы имеете в виду .name
свойство объекта функции Ecmascript, который используется в качестве "новой" цели?
Если это так, вы можете использовать duk_is_constructor_call()
чтобы увидеть, является ли текущий вызов вызовом конструктора, используйте duk_push_current_function()
получить доступ к объекту функции конструктора Ecmascript, а затем прочитать его свойства, используя обычные вызовы API свойств. Например, если под "именем класса" вы подразумеваете .name
объекта функции, вы просто прочитали бы его свойство name, используя duk_get_prop_string().