Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 27.06.2012, 18: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 послезавтра экзамен по философии. могу бредить
Ответить с цитированием
  #12 (permalink)  
Старый 27.06.2012, 22:59
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

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>
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

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

Сообщение от DjDiablo
А не лучше ли уж тогда вместо propName, сразу обьект передавать ?
когда я стал писать код, и удалять 2 идеи, возникише до этого, как-то лень было чистить код
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плагин jQuery form. Добавляю форму js'ом Physicist jQuery 3 21.07.2011 16:46
Как сделать 2 галереи JQuery на одной странице? orendzi jQuery 8 16.07.2011 14:22
Как отлаживать события? Или как сделать трассировку вызовов функций? gennad Events/DOM/Window 1 18.08.2010 12:21
как сделать кнопки меню в виде веера? sever2k6 Элементы интерфейса 5 28.07.2010 23:46
Как сделать просмотр большой картинки? greatilya Элементы интерфейса 7 20.05.2010 12:44