Сообщение от SkaN
|
Потом этот объект становится частью jQuery
|
это делается только добавлением свойства (значением может быть объект) либо в
jQuery.fn, либо в
jQuery.fn.init.prototype.
насчёт второго :
<script src="http://code.jquery.com/jquery-1.7.2.js"></script>
<script>
jQuery.fn.init.prototype.foo = { bar: "ok" };
alert( $().foo.bar );
</script>
Сообщение от SkaN
|
Вобщем смысл примерно таков: хочу объект сделать частью jQuery, чтобы без самого объекта его методы и свойства нельзя было вызывать.
|
а как можно обратиться к методам объекта без самого объекта?
Сообщение от SkaN
|
2 melky: нужно, чтобы в объекте хранился объект jQuery и потом передавался всем методам объекта. Как-то так...
|
нужно как-то сохранять этот объект. я сделал через наследование :
<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>
Сообщение от DjDiablo
|
далайте быстрее других, делайте надёжнее других, делайте мощнее чем у других
|
утопия. эти понятия противоречивы.
PS послезавтра экзамен по философии. могу бредить