Итак, в основном я хочу скопировать функции CanvasRenderingContext2D.prototype и сохранить их в различных переменных. И отлично, я делаю:
var c = CanvasRenderingContext2D.prototype;
var moveTo = c.moveTo;
и после пары попыток избежать незаконного вызова
moveTo(100, 100); // illegal invocation
moveTo.call($('canvas').getContext('2d'), 100, 100) /*
^ which actually doesn't give any error
but doesn't seem to work in all cases either. I guess
I can't take any other context than the original one
*/
moveTo.call(CanvasRenderingContext2D, 100, 100) // illegal invocation
moveTo.call(CanvasRenderingContext2D.prototype, 100, 100) // illegal
moveTo.call(CanvasRenderingContext2D.constructor (tried what I can) // illegal
moveTo.call(anything else, 100, 100) // bet what this time
(function() {
moveTo(100, 100);
})(); // failed too
но для меня все пути решения нужного контекста провалились.
Я хочу сохранить эти функции, потому что мне нужно переписать исходные функции, чтобы выполнить некоторые вычисления, а затем фактически увидеть что-то, что мне нужно для выполнения сохраненных функций. Я много читал о недопустимых вызовах, здесь о переполнении стека, а также о других веб-сайтах, и я вполне понимаю проблему - мне нужен оригинальный контекст, чтобы функция имела свои переменные и т. Д.
// if we have
var a = something.run();
// then we can't do a(), because 'something' is lost, illegal invocation
Вот как я это понимаю, и я надеюсь, что я не ошибаюсь.
В основном, что я должен поместить в контекст, если все терпит неудачу? Я понятия не имею, каким может быть оригинальный контекст. Кстати, пожалуйста, не кричите на меня, если я не вижу здесь очевидных вещей или не знаю, что контекст - это бла-бла-бла.