14.12.2010, 13:42
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Основная тут проблема в том, что JS не предоставляет возможности указать функцию, которая бы вызывалась при отсутствии у объекта свойства, к которому обращаются (а-ля __set/__get в PHP).
И даже если представить себя сейчас разработчиками языка, данную возможность добавить в него не так легко. Может поэтому и не добавляется.
|
|
14.12.2010, 13:54
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от Kolyaj
|
данную возможность добавить в него не так легко.
|
ну по чему же ? вроде легко. Просто если нет функции в вызываемом обьекте - вызывать __autoload в этом обьекте. если его нет - то вызывать __autoload выше по структуре обьекта и так до window. а в передаваемых параметрах: this = то где был найден __autoload и 4 входящих - обьект вызова функции, имя функции, thisobj в вызываемой ф-ции, и массив параметров в нее. При возврате true - не генерировать ошибку. false - искать выше __autoload
Но на деле в коде видимо не легко такое встроить.
за вызов функции в самой функции. Тут надо по другому делать логику: вызывать __autoload тут надо думаю не имеет смысла а генерировать вызов window.__autoload.call(window, function, fnName, thisOnCall, []);
П.С. Введя хотя бы __call, __set, __get, __autoload в JS - в корень поменялся бы код любой CMS
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Последний раз редактировалось PeaceCoder, 14.12.2010 в 14:17.
|
|
14.12.2010, 14:08
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Забудем пока про __autoload, он упирается в другую проблему, в сеть.
Сообщение от PeaceCoder
|
Просто если нет функции в вызываемом обьекте - вызывать __autoload в этом обьекте. если его нет - то вызывать __autoload выше по структуре обьекта и так до window.
|
Это будет противоречить другому механизму: поиску свойства в цепочке прототипов.
|
|
14.12.2010, 14:16
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от Kolyaj
|
Это будет противоречить другому механизму: поиску свойства в цепочке прототипов.
|
Не так выразился. Это я и имел ввиду. Если уже в прототипах нет, то искать __autoload в них. В основном я так думаю как раз таки в прототип обьекта и надо ставить __autoload, что бы он был 1 на все подсвойства обьекта.
Сообщение от Kolyaj
|
Забудем пока про __autoload, он упирается в другую проблему, в сеть.
|
Если так рассуждать то зачем автолоад? А раз он нужен значит с сетью у разработчика уже все продумано.
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Последний раз редактировалось PeaceCoder, 14.12.2010 в 14:19.
|
|
14.12.2010, 14:27
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от Kolyaj
|
Забудем пока про __autoload, он упирается в другую проблему, в сеть.
|
не упирается, ты ж сам ему будешь указывать, какой нужен файл. Правда опять же, сети может не быть
Сообщение от Kolyaj
|
Это будет противоречить другому механизму: поиску свойства в цепочке прототипов.
|
а это да, может даже идеологическая причина
|
|
14.12.2010, 15:08
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от PeaceCoder
|
Если так рассуждать то зачем автолоад?
|
Я как раз говорю, что он не нужен
Я рассуждаю о другой проблеме, без решения которой autoload невозможен.
|
|
15.12.2010, 15:26
|
Ламер
|
|
Регистрация: 19.02.2010
Сообщений: 295
|
|
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();
}
}
решение для песочницы, не более
|
|
15.12.2010, 16:03
|
Профессор
|
|
Регистрация: 24.09.2010
Сообщений: 178
|
|
|
|
|
|