Разве это не было бы хорошо? К сожалению, нет хорошего способа сделать это.
Проблема, как вы, вероятно, заметили, заключается в том, что установка функции в качестве функции-конструктора prototype
и последующий вызов функции-конструктора с new
приводит к простому старому объекту, а не к вызываемому объекту функции.
Существует один возможный обходной путь, в зависимости от того, для чего вам это нужно. Это интересный трюк, но , вероятно, не очень хорошая идея для реального использования . Вы можете создать iframe и захватить Function
из окна iframe. Теперь у вас есть «копия» Function
, с которой вы можете делать все, что хотите, не портя вашу «настоящую» функцию Function
.
var frame = document.createElement('iframe');
frame.id = frame.name = 'hacks';
frame.style.zIndex = '-1';
document.appendChild(frame);
var MyFunction = frames['hacks'].Function;
// add stuff to MyFunction and MyFunction.prototype