Цитата:
насчёт второго :
<script src="http://code.jquery.com/jquery-1.7.2.js"></script>
<script>
jQuery.fn.init.prototype.foo = { bar: "ok" };
alert( $().foo.bar );
</script>
Цитата:
Цитата:
<script src="http://code.jquery.com/jquery-1.7.2.js"></script>
<p>TEST</p>
<script>
jQuery.fn.colorchangers = {
toRed: function() {
// JQ-объект (контекст) хранится в свойстве _this
// this - это объект, который щас описываем.
return this._this.css("color", "red");
},
randomColors: ["green", "aqua", "lime"],
toRandom: function(){
// т.к. this равен объекту colorchangers, то может обратиться к его свойствам
var randomColor = this.randomColors[Math.floor(Math.random()*this.randomColors.length)];
return this._this.css("color", randomColor);
}
};
// тут вся магия
function createGetter(propName) {
// упс, нет такого объекта
if (typeof jQuery.fn[propName] != "object") {
return $.error("Указанное имя свойства "+propName+" не является объектом");
}
// наследование проходится в курсе молого бойца.
var F = function(){};
F.prototype = jQuery.fn[propName];
// делаем из объекта геттер.
jQuery.fn[propName] = function() {
// чтобы каждый раз не создавать, сохраним его.
var fresh = this.data(propName+"_getter");
// если не сохранён, создаём и сохраняем
if (!fresh) {
fresh = new F();
this.data(propName+"_getter", fresh);
}
// сохраняем\изменяем контекст - в любой момент он может измениться - добавиться элементы и т.д.
fresh._this = this;
return fresh;
};
}
// колдуем ...
createGetter("colorchangers");
// тестим
var test = $("p");
test.colorchangers().toRed();
</script>
<div>TEST_2</div>
<script>
setTimeout(function() {
// изменим объект JQ и ещё затестим
test = test.add("div");
test.colorchangers().toRandom();
}, 800);
</script>
Цитата:
PS послезавтра экзамен по философии. могу бредить :) |
Devote - спасибо, перебор хоть и нужен не всегда,
но в том случае который я имел ввиду он и вправду нужен, я забыл про него просто напросто. melky Это не утопия, это вроде бы как гипербола :) в общем стилистическая фигура явного и намеренного преувеличения, имеющего целью усиление выразительности :D Цитата:
А не лучше ли уж тогда вместо propName, сразу обьект передавать ?
<script src="http://code.jquery.com/jquery-1.7.2.js"></script>
<p>TEST</p>
<script>
// тут вся магия (бывший метод createGetter)
jQuery.createPlugin=function (propName,obj) {
// наследование проходится в курсе молого бойца.
var F = function(){};
F.prototype = obj;
// делаем из объекта геттер.
jQuery.fn[propName] = function() {
// чтобы каждый раз не создавать, сохраним его.
var fresh = this.data(propName+"_getter");
// если не сохранён, создаём и сохраняем
if (!fresh) {
fresh = new F();
this.data(propName+"_getter", fresh);
}
// сохраняем\изменяем контекст - в любой момент он может измениться - добавиться элементы и т.д.
fresh._this = this;
return fresh;
};
}
// колдуем ...
jQuery.createPlugin("colorchangers",{
toRed: function() {
// JQ-объект (контекст) хранится в свойстве _this
// this - это объект, который щас описываем.
return this._this.css("color", "red");
},
randomColors: ["green", "aqua", "lime"],
toRandom: function(){
// т.к. this равен объекту colorchangers, то может обратиться к его свойствам
var randomColor = this.randomColors[Math.floor(Math.random()*this.randomColors.length)];
return this._this.css("color", randomColor);
}
});
// тестим
var test = $("p");
test.colorchangers().toRed();
</script>
<div>TEST_2</div>
<script>
setTimeout(function() {
// изменим объект JQ и ещё затестим
test = test.add("div");
test.colorchangers().toRandom();
}, 800);
</script>
|
Цитата:
|
| Часовой пояс GMT +3, время: 07:44. |