Показать сообщение отдельно
  #11 (permalink)  
Старый 27.06.2012, 19:19
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от 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 послезавтра экзамен по философии. могу бредить
Ответить с цитированием