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, время: 15:20. |