Показать сообщение отдельно
  #9 (permalink)  
Старый 03.10.2019, 18:50
Интересующийся
Отправить личное сообщение для Launder Посмотреть профиль Найти все сообщения от Launder
 
Регистрация: 25.04.2019
Сообщений: 19

Кстати, можно сделать копию, вот таким незамысловатым образом(ходил вокруг да около, а в голову, чего-то не пришло).

function simple(a, b)
		{
    		    var A = a*a;
                    var B = b*b;
                    var C = A*B;
                    return C;
                }
    
var simple1 = String(simple); //превращаем в строку

simple2 = simple1.slice(0, 83) + '/' + simple1.slice(84); //меняем знак

changeSimple = new Function(simple2[16], simple2[19], simple2.slice(32, 104)); //копируем отдельно переменные, отдельно тело, и приводим её в боевую готовность

alert( simple(5, 2) );  //100
alert( changeSimple(5, 2) ); //6.25


То есть, мы скопировали функцию в строку, немного поменяли(чтоб было немного посложней и поинтересней) и вновь собрали работающий экземпляр.
Понятно, что это всё в первом приближении, что тут много допущений, о которых говорилось выше(например, замыкания, и не понятные мне "слоты", впрочем понятно, что есть некие внутренние поля, которыми движок, при компиляции, помечает какие-то характерные участки кода), что в одном случае, Function Declaration, в другом Function Expression, что добавим мы пару пробелов перед названием, и тело функции изменит свои "координаты" в строке(впрочем, не думаю, что найти тело и аргументы будет такой уж проблемой, у произвольной, и не слишком замысловатой функции), что если функция используется как объект (то есть в ней хранятся свойства и методы), то, хоть и не сложно идентифицировать функцию (с помощью Object.prototype.toString), по-видимому, потребуется копирование отдельно методов, и отдельно тела функции, и их дальнейшего соединения в что-то общее и работающее - вопрос всё-таки требующий отдельного рассмотрения.
Ответить с цитированием