аналог __autoload в JS
В PHP есть такая функция "__autoload", которая вызывается в момент когда интерпретатор не может найти определене какого либо класса. Можно ли придумать что нибудь подобое на JS? Можно ли как то перехватить ошибку отсутствия определения функции? Может window.onerror подойдёт? Как тогда определить имя функции?
И ещё вопросик: когда в контенте загружаемом с помощью AJAX встречается сслка на JS файл, то функции из этого файла становятся доступны. При этом если в этом же контенте есть скрипт вида: <script type="text/javascript"> onload = function() { } </script> то бработчик onload не срабатывает. |
Цитата:
Цитата:
|
СПС!
|
можно перехватить отсутствие функции-уже писал об этом.но повторюсь. допустим присвоить какойто переменной маркеру какое либо значение.в функции сделать изменение этого значения. если значение изменилось то функция есть. если не изменилось значит она отсутствует
|
dmitriymar,
Спасибо за ответ, но думаю что мне это не подойдёт. Мне нужно делать это не с одной функцией а с несколькими, при этом у них куча всяких разных параметров. В общем говнокода в этом случае будет не избежать, я и так уже понаворочал много там. |
я делал чуть не так-делал подгрузку скрипта-где было несколько функций и проверял наличие одной если она была то и все относящиеся к скрипту тож соответсвено были
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
может, скорее, то, что js не рассчитан на выполнение в какой-то конкретной среде и даже если бы он ее обязывал предоставлять для этого какие-то интерфейсы, то в каком виде бы он указывал, где искать класс?
|
Основная тут проблема в том, что JS не предоставляет возможности указать функцию, которая бы вызывалась при отсутствии у объекта свойства, к которому обращаются (а-ля __set/__get в PHP).
И даже если представить себя сейчас разработчиками языка, данную возможность добавить в него не так легко. Может поэтому и не добавляется. |
Цитата:
Но на деле в коде видимо не легко такое встроить. за вызов функции в самой функции. Тут надо по другому делать логику: вызывать __autoload тут надо думаю не имеет смысла а генерировать вызов window.__autoload.call(window, function, fnName, thisOnCall, []); П.С. Введя хотя бы __call, __set, __get, __autoload в JS - в корень поменялся бы код любой CMS |
Забудем пока про __autoload, он упирается в другую проблему, в сеть.
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Я рассуждаю о другой проблеме, без решения которой autoload невозможен. |
function test(){ test_func(); } try{ test(); }catch(e){ if(new String(e).indexOf('is not a function')!=-1){ //тут парсим строку е и находим имя функции что б подгрузить нужный файл var headID = document.getElementsByTagName("head")[0]; var addScript = document.createElement('script'); addScript.type = 'text/javascript'; addScript.src = '../your_func.js'; headID.appendChild(addScript); test(); } } решение для песочницы, не более |
А почему б не использовать решение аля jit? http://www.felocity.org/blog/article...or_javascript/
|
Часовой пояс GMT +3, время: 03:06. |