каменное кеширование?
возник вопрос, почему почти везде делают так :
function xlmObj(){ try { return new XMLHttpRequest(); } catch (m){ try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { return ; } } } } если можно сделать по-другому, не вычисляя каждый раз ЭТО : (function(window){ if( !window.XMLHttpRequest ){ window.XMLHttpRequest = (function(){ try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch ( e ) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch ( g ) { return new IFRAME_imitation(); } } })()// func end. } })(window) а потом уже использовать XMLHttpRequest,как обычно. во всех браузерах var a = XMLHttpRequest( ) ; a.open('GET',url); ........ если это ифрейм-имитация, то во фрейме будет при open создаваться форма, при send отправляться. ну , это уже можно додумать. и еще один вопрос. в jQuery , можно посмотреть тут,например по поиску // Fake xhr, в функции ajax, есть фейковый объект XMLHttpRequest и метод аборт у него : // Cancel the request abort: function( statusText ) { statusText = statusText || "abort"; if ( transport ) { transport.abort( statusText ); } done( 0, statusText ); return this; } обьясните пожалуйста,зачем создавать этот фейковый объект XMLHttpRequest. |
1. Дело вкуса. По сути, написано одно и то же.
2. jQuery спроектирован так, что он никогда не должен выдавать ошибок. Поэтому если браузер ну вообще никак не поддерживает аякс, для того, чтобы не менять логику, сделаем так, что он «типа» его поддерживает. То есть, мы можем сделать так: var myObj; if (myObj = document.getElementById("my-object")){ myObj.style.color = "red"; }; И присваивание произойдет только если элемент найден. Или так: (document.getElementById("my-object") || {"style": {}}).style.color = "red" И присваивание произойдет в любом случае, но если объекта нет, значение присвоится и сразу же уйдет в небытие сборщику мусора. Второй способ внешне похож на говнокод, но в случае, когда отсутствие объекта с id "my-object" — явление, скорее, аварийное, чем штатное, вполне себя оправдывает. |
Цитата:
|
Riim,
я что-то не понял ничего из того, что вы написали. Я уже давно везде использую подход, похожий на предложение melky и никаких проблем не наблюдаю. UPD: хотя примерно понял, но кажется вы всё смешали в кучу. |
Цитата:
|
Цитата:
я немножко не понял,о чем вы написали. вы ведь о примере из jQuery объяснили? но там ведь и не пахнет прототипами. там ведь использование методов-заглушек при отсутствии оных в объекте ... спасибо Kolyaj за ссылку на свой фреймворк (да?). forEach, map , every , перемешка и т.д я нахожу юзабельными ) у меня тоже есть гит, но он у меня только для сохранение истории изменения кода :) |
Цитата:
|
Цитата:
|
Вроде так понятно написал, но никто не понимает :( . В общем, на примере:
if (!window.XMLHttpRequest) { function XMLHttpRequest() { try {return new ActiveXObject('Msxml2.XMLHTTP')} catch (err) {} try {return new ActiveXObject('Microsoft.XMLHTTP')} catch (err) {} return null; } } XMLHttpRequest.prototype.myMethod = function() { alert('Ok!'); }; var xhr = new XMLHttpRequest(); xhr.myMethod(); Здесь alert не сработает в IE, т. к. в IE конструктор возвращает не свой this. |
Часовой пояс GMT +3, время: 13:30. |