Как получить имя класса при запуске функции конструктора в 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().

Другие вопросы по тегам