Octane, огромнейшее Вам спасибо...
|
Вот, что получилось.
А как вы считаете стоит ли так делать? Просто есть $ а хочется в противоположность ему рубль то есть р и все команды писать на русском. Стоит ли так делать? function р(id) { return new р.wrapper(id); } р.wrapper = function (id) { this.id = id; }; р.wrapper.prototype = р.prototype = { constructor: р, загрузить: function (data) { alert("this.id="+this.id+"\n"); alert("data="+data+"\n"); }, test: function () { alert(this.id.nodeName); return this; } }; р("Привет").загрузить("Ураааа"); |
Можно сказать это первый релиз своего jquery, огромнейшее спасибо Octane.
Так если глянуть ничего сложного, хотя не совсем пока понимаю вот эту строчку $.any.prototype = $.prototype = {constructor: $}; А так всё нормально. Ещё когда смотришь на jquery знак $ так пугает, думаешь это наверное что-то супер навороченное, а это просто название функции всего навсего. <html> <body> ljkj <div id=my style="border:5px solid #8899ff">HI</div> </body> </html> <script> function $$(id) { return document.getElementById(id); } function $(id) { return new $.any(id); } $.any = function (id) { this.id = id; }; $.any.prototype = $.prototype = {constructor: $}; $.prototype.text = function(data) { var id=this.id; $$(id).innerHTML=data; return this; } $.prototype.css = function(property,data) { var id=this.id; $$(id).style[property]=data; return this; } $.prototype.load = function(data) { var id=this.id; var xml; if(window.ActiveXObject) { try { xml=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xml=false; } } else { try { xml=new XMLHttpRequest(); } catch (e) { xml=false; } } if(!xml) alert("Error creating the XMLHttpRequest object"); xml.onreadystatechange = function() { if(xml.readyState != 4 || xml.readyState==0) { $$(id).innerHTML=" <img src='/img/pb.gif'> "; } if(xml.readyState == 4) { if(xml.status == 200) { $(id).text(xml.responseText); } else { $(id).text("Error: returned status code " + xml.status + " " + xml.statusText); } } }; xml.open("GET", data, true); xml.send(null); return this; } $("my").text("Через 5 секунд суда загрузится другое слово") setTimeout('$("my").text("Скоро кое что ещё поменятеся")',5000); setTimeout('$("my").css("border","1px solid #888888")',10000); </script> |
Цитата:
|
Цитата:
function $(id) { return new any(id); } function any(id) { … } any.prototype.text = function (…) {…}; any нам не нужен больше нигде, кроме как в функции $, поэтому, чтобы он не валялся в глобальной области видимости, просто переносим его в свойства функции $: function $(id) { return new $.any(id); } $.any = function (id) { … }; $.any.prototype.text = function (…) {…}; а чтобы вообще забыть про этот any, инициализируем его прототип ссылкой на прототип $: function $(id) { return new $.any(id); } $.any = function (id) { … }; $.any.prototype = $.prototype; $.prototype.text = function (…) {…}; теперь $.any.prototype и $.prototype указывают на один и тот же объект, но нам удобнее использовать ссылку $.prototype, про $.any.prototype забываем. чтобы каждый раз при создании нового метода не писать $.prototype.methodName, можно сделать так: $.prototype = { method1: function (…) {…}, method2: function (…) {…}, method3: function (…) {…} }; но надо не забыть, что конструктор у нас $.any и методы должны находится в его прототипе: $.prototype = { method1: function (…) {…}, method2: function (…) {…}, method3: function (…) {…} }; $.any.prototype = $.prototype; или короче $.any.prototype = $.prototype = { method1: function (…) {…}, method2: function (…) {…}, method3: function (…) {…} }; но при инициализации прототипа новым объектом, теряется ссылка на конструктор, поэтому и определяем её вручную ($.any нам не нужен, поэтому напишем просто $): $.any.prototype = $.prototype = { constructor: $, method1: function (…) {…}, method2: function (…) {…}, method3: function (…) {…} }; вот и получается та штука, что я показал в первый раз: function $(id) { return new $.any(id); } $.any = function (id) { … }; $.any.prototype = $.prototype = { constructor: $, method1: function (…) {…}, method2: function (…) {…}, method3: function (…) {…} }; ссылка на конструктор хоть и не совсем правильная, но остается работоспособной, потому что return из конструктора вернет нужный объект: var obj = new $(…); // так тоже будет работать |
Аргументированно, меня тоже отбило желание эта статья на русском делать свой framework...
|
Если честно ничего не понял, но думаю если раз 10 прочитать то пойму...
|
Как сделать чтобы можно было вызвать это же метод $ например вот так
my('div1').text('Привет'); ? Можно конечно просто весь код внутри поментяь, но в jquery , как то по другому , но что-то не пойму |
Создать еще одну глобальную ссылку на функцию $. Читай теорию, разбирайся, а то кинулся функционал реализовать, а как основы работают не понимаешь, без этого ничего хорошего не получится.
|
Читаю ту же книгу:) Седьмой день - 85 страница.
Очень хорошая книга. |
Часовой пояс GMT +3, время: 05:45. |