Devote - спасибо, перебор хоть и нужен не всегда,
но в том случае который я имел ввиду он и вправду нужен,
я забыл про него просто напросто.
melky
Это не утопия, это вроде бы как гипербола
в общем стилистическая фигура явного и намеренного преувеличения, имеющего целью усиление выразительности
Цитата:
|
я сделал через наследование
|
жёстко завернул.
А не лучше ли уж тогда вместо 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>