Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   JQuery наследование виджета (https://javascript.ru/forum/jquery/16753-jquery-nasledovanie-vidzheta.html)

see613 20.04.2011 20:41

JQuery наследование виджета
 
Помогите. Требуется унаследовать datepicker (любой виджет). При этом чтобы при расширении метода можно было не переписывать весь его код заного, а вызвать конструктор (или в яваскрипте наверно метод прототипа), после чего дописать новый код. Наверное все же лучше сказать расширить класс, а не унаследовать, ведь в итоге должен получиться класс datepicker (и называться datepicker), расширенный новыми методами. Знание яваскрипта - так себе, читал об этом - упорно, осилить - не смог.
Прошу помощи специалистов.

see613 21.04.2011 12:07

имется вот такая штука:

(function($, undefined){
    // переменные, без которых не работает (просто скопированы из datepickera)
    var PROP_NAME = 'datepicker';
    var dpuuid = new Date().getTime();
    /* ------------------- */

    var MyDatePicker = {
        // метод который есть в самом datepickere, его надо унаследовать
        _generateHTML: function(inst) {
            /* проблемная строка */
            var html = $.datepicker.__proto__._generateHTML.call(this, inst);
            /* ------------------- */

            return html + 'мой текст';            
	    },  
 
    };     
    
    $.extend($.datepicker, MyDatePicker );                      
})(jQuery);


работает невезде изза наличия __proto__, а если поставить prototype вместо него, выдает зацикливание, так как получается, мы вызываем внутри метода этот же метод этого же класса (кажется так). Может специалист заглянет на огонёк и поможет в этой х$%&рне?

see613 22.04.2011 09:14

полковнику никто ... не пишет ...

see613 22.04.2011 10:36

В итоге методом усиленного тыка получилась вот такая хрень, которая, как не странно работает:

(function($, undefined){

    var myDatePicker = {

        _generateHTML: function(inst) {
            var html = $.datepicker.constructor.prototype._generateHTML.call(this, inst);
            return html + 'мой текст';            
	    },  
        
    };     
    
    $.extend($.datepicker, myDatePicker );                      
})(jQuery);


Но модератор форума linkexchanger.su написал, что сделать такое не получится (а мне кажется модератором на форуме програмистов просто так не становятся), остается 2 варианта: 1) модератор ошибся (есть вероятность, ведь все мы люди); 2) в моем решении есть косяк или подводный камень(вероятность 99% по сравнению с 1% варианта №1). Поэтому может кто-нить сможет наити и подсказать что здесь не так?


Часовой пояс GMT +3, время: 19:47.