Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Пример когда нужно чтобы функция присваивалась переменной. / 13 сообщений из 13, страница 1 из 1
27.07.2013, 13:33
    #38346293
lanzer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
Не пойму когда это может понадобиться.
...
Рейтинг: 0 / 0
27.07.2013, 13:44
    #38346297
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
lanzerНе пойму когда это может понадобиться.

Какую конструкцию имеете ввиду? Просто разные ответы могут быть :) Напишите пример.
...
Рейтинг: 0 / 0
27.07.2013, 17:05
    #38346383
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
В более-менее сложных ajax-приложениях — всегда.
...
Рейтинг: 0 / 0
27.07.2013, 20:33
    #38346447
lanzer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
Програмёр Какую конструкцию имеете ввиду? Просто разные ответы могут быть :) Напишите пример.
Я как раз таки про это и хотел спросить - в каких конструкциях? :) Наверное самый распространенный пример на ваш взгляд подойдет.

AntonariyВ более-менее сложных ajax-приложениях — всегда.
Если собираюсь писать Ajax на jQuery, тоже?
...
Рейтинг: 0 / 0
27.07.2013, 20:49
    #38346451
Малыхин Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
Ключевое слово "переменная"
...
Рейтинг: 0 / 0
27.07.2013, 21:21
    #38346459
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
lanzerПрограмёр Какую конструкцию имеете ввиду? Просто разные ответы могут быть :) Напишите пример.
Я как раз таки про это и хотел спросить - в каких конструкциях? :) Наверное самый распространенный пример на ваш взгляд подойдет.

AntonariyВ более-менее сложных ajax-приложениях — всегда.
Если собираюсь писать Ajax на jQuery, тоже?

Не могу вспомнить (придумать) ни одного случая, когда это было бы необходимым... Но бывают случаи, когда это было бы удобным:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
function getBrowser(){
...
}

function forChrome(str){
  ...//действия для хрома
}

function forFirefox(str){
  ...//действия для файрфокса
}

function forUndefinedBrowser(str){
  ...//если браузер не определили
}

function someFunc(some_var, browser_func){
 var str = func(some_var);
 ...
 browser_func(str)
...
}

var f = null;
switch(getBrowser()){
  case "chrome": f=forChrome; break;
  case "firefox": f=forFireFox; break;
  default: f=forUndefinedBrowser;
}

someFunc('my var', f); //вот тут удобно использовать



По такому принципу функции принимают разные callback методы, например. Можно было бы и сам вызов поставить в switch..case, однако это было бы менее удобно и в больших проектах, где много кода, ещё и путано получилось бы (сложнее отследить что и когда вызывается и всё такое).

Итак, мой вывод: в любом случае можно обойтись без данной конструкции (запись функции в переменную), но с ней получается лучше и аккуратнее.
...
Рейтинг: 0 / 0
27.07.2013, 22:58
    #38346498
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
ПрограмёрНе могу вспомнить (придумать) ни одного случая, когда это было бы необходимым...Проще показать такой случай:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
 DWindow.prototype.createToolbar = function ($container, toolbar) {
        var mWindow = this;
        var toolClicker = function () {
            var call = mWindow.toolbarFunc[$(this).attr("toolIndex")];
            var opts = call.button.linkbutton("options");
            if(opts.disabled) {
                return;
            }
            if(call.group) {
                for(var x = 0; x < mWindow.toolbarFunc.length; x++) {
                    if(mWindow.toolbarFunc[x]) {
                        if(call.group == mWindow.toolbarFunc[x].group) {
                            mWindow.toolbarFunc[x].button.menubutton("enable");
                        }
                    }
                }
                call.button.menubutton("disable");
            }
            call.func.apply(mWindow, call.args);
        };
        for(var i = 0; i < toolbar.length; i++) {
            var tlb = toolbar[i], sTlb = toolbar[i];
            if(sTlb == "separator") {
                $("<span>|</span>").appendTo($container).addClass("separator");
                this.toolbarFunc.push(null);
            } else {
                var call = new ToolbarFunc();
                call.selectionRespond = tlb.selectionRespond;
                call.button = $("<a href='#'/>").attr("toolIndex", i).appendTo($container);
                if(tlb.clickSource) {
                    call.func = new Function("", tlb.clickSource);
                    call.group = tlb.group;
                    call.button.bind("click", toolClicker);
                } else if(!tlb.menu) {
                    alert("This toolbar for object " + this.options.webitem + " has expired");
                    break;
                }
                this.toolbarFunc.push(call);
                if(tlb.menu) {
                    var $menu_div = $("<div style='display:none'>").css("width", tlb.width ? tlb.width : "600px;").attr("id", "tmenu_" + mWindow.options.webitem + "_" + mWindow.options.idValue + "_" + i).appendTo(document.body);
                    call.button.attr("menu", "#" + $menu_div.attr("id"));
                    for(var j = 0; j < tlb.menu.length; j++) {
                        call = new ToolbarFunc();
                        call.func = new Function("", tlb.menu[j].clickSource);
                        call.button = $("<div>").attr("toolIndex", this.toolbarFunc.length).bind("click", toolClicker).text(tlb.menu[j].text).appendTo($menu_div);
                        call.isMenu = true;
                        this.toolbarFunc.push(call);
                    }
                    this.menudivs.push($menu_div);
                }
                call.button.menubutton({
                    Window: this,
                    iconCls: tlb.iconCls,
                    text: tlb.text,
                    disabled: tlb.selectionRespond
                });
            }
        }
    };
...
Рейтинг: 0 / 0
28.07.2013, 09:40
    #38346540
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
AntonariyПрограмёрНе могу вспомнить (придумать) ни одного случая, когда это было бы необходимым...
Проще показать такой случай:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
 DWindow.prototype.createToolbar = function ($container, toolbar) {
        var mWindow = this;
        var toolClicker = function () {
            var call = mWindow.toolbarFunc[$(this).attr("toolIndex")];
            var opts = call.button.linkbutton("options");
            if(opts.disabled) {
                return;
            }
            if(call.group) {
                for(var x = 0; x < mWindow.toolbarFunc.length; x++) {
                    if(mWindow.toolbarFunc[x]) {
                        if(call.group == mWindow.toolbarFunc[x].group) {
                            mWindow.toolbarFunc[x].button.menubutton("enable");
                        }
                    }
                }
                call.button.menubutton("disable");
            }
            call.func.apply(mWindow, call.args);
        };
        for(var i = 0; i < toolbar.length; i++) {
            var tlb = toolbar[i], sTlb = toolbar[i];
            if(sTlb == "separator") {
                $("<span>|</span>").appendTo($container).addClass("separator");
                this.toolbarFunc.push(null);
            } else {
                var call = new ToolbarFunc();
                call.selectionRespond = tlb.selectionRespond;
                call.button = $("<a href='#'/>").attr("toolIndex", i).appendTo($container);
                if(tlb.clickSource) {
                    call.func = new Function("", tlb.clickSource);
                    call.group = tlb.group;
                    call.button.bind("click", toolClicker);
                } else if(!tlb.menu) {
                    alert("This toolbar for object " + this.options.webitem + " has expired");
                    break;
                }
                this.toolbarFunc.push(call);
                if(tlb.menu) {
                    var $menu_div = $("<div style='display:none'>").css("width", tlb.width ? tlb.width : "600px;").attr("id", "tmenu_" + mWindow.options.webitem + "_" + mWindow.options.idValue + "_" + i).appendTo(document.body);
                    call.button.attr("menu", "#" + $menu_div.attr("id"));
                    for(var j = 0; j < tlb.menu.length; j++) {
                        call = new ToolbarFunc();
                        call.func = new Function("", tlb.menu[j].clickSource);
                        call.button = $("<div>").attr("toolIndex", this.toolbarFunc.length).bind("click", toolClicker).text(tlb.menu[j].text).appendTo($menu_div);
                        call.isMenu = true;
                        this.toolbarFunc.push(call);
                    }
                    this.menudivs.push($menu_div);
                }
                call.button.menubutton({
                    Window: this,
                    iconCls: tlb.iconCls,
                    text: tlb.text,
                    disabled: tlb.selectionRespond
                });
            }
        }
    };



Может ошибаюсь, но разве так работать не будет?
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
 DWindow.prototype.createToolbar = function ($container, toolbar) {
        var mWindow = this;
        function toolClicker() {
            var call = mWindow.toolbarFunc[$(this).attr("toolIndex")];
            var opts = call.button.linkbutton("options");
            if(opts.disabled) {
                return;
            }
            if(call.group) {
                for(var x = 0; x < mWindow.toolbarFunc.length; x++) {
                    if(mWindow.toolbarFunc[x]) {
                        if(call.group == mWindow.toolbarFunc[x].group) {
                            mWindow.toolbarFunc[x].button.menubutton("enable");
                        }
                    }
                }
                call.button.menubutton("disable");
            }
            call.func.apply(mWindow, call.args);
        };
        for(var i = 0; i < toolbar.length; i++) {
            var tlb = toolbar[i], sTlb = toolbar[i];
            if(sTlb == "separator") {
                $("<span>|</span>").appendTo($container).addClass("separator");
                this.toolbarFunc.push(null);
            } else {
                var call = new ToolbarFunc();
                call.selectionRespond = tlb.selectionRespond;
                call.button = $("<a href='#'/>").attr("toolIndex", i).appendTo($container);
                if(tlb.clickSource) {
                    call.func = new Function("", tlb.clickSource);
                    call.group = tlb.group;
                    call.button.bind("click", toolClicker);
                } else if(!tlb.menu) {
                    alert("This toolbar for object " + this.options.webitem + " has expired");
                    break;
                }
                this.toolbarFunc.push(call);
                if(tlb.menu) {
                    var $menu_div = $("<div style='display:none'>").css("width", tlb.width ? tlb.width : "600px;").attr("id", "tmenu_" + mWindow.options.webitem + "_" + mWindow.options.idValue + "_" + i).appendTo(document.body);
                    call.button.attr("menu", "#" + $menu_div.attr("id"));
                    for(var j = 0; j < tlb.menu.length; j++) {
                        call = new ToolbarFunc();
                        call.func = new Function("", tlb.menu[j].clickSource);
                        call.button = $("<div>").attr("toolIndex", this.toolbarFunc.length).bind("click", toolClicker).text(tlb.menu[j].text).appendTo($menu_div);
                        call.isMenu = true;
                        this.toolbarFunc.push(call);
                    }
                    this.menudivs.push($menu_div);
                }
                call.button.menubutton({
                    Window: this,
                    iconCls: tlb.iconCls,
                    text: tlb.text,
                    disabled: tlb.selectionRespond
                });
            }
        }
    };
...
Рейтинг: 0 / 0
28.07.2013, 10:39
    #38346547
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
ээээ
вообще-то да)
...
Рейтинг: 0 / 0
28.07.2013, 13:48
    #38346592
jsz
jsz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
Почитайте тут хотя бы, раздел "Именованные функциональные выражения".
...
Рейтинг: 0 / 0
28.07.2013, 14:12
    #38346600
callback
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
14627246 -
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
.......
function someFunc(some_var, browser_func){
 ...
 browser_func('blah-blah')  //вот тут удобно использовать
...
}

var f = forUndefinedBrowser;

switch(getBrowser()){
  case "chrome": f=forChrome; break;
  case "firefox": f=forFireFox; break; 
}

someFunc('my var', f);


14627180
...
Рейтинг: 0 / 0
28.07.2013, 14:31
    #38346615
lanzer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
Програмёр , коротко и понятно. A lot of thanks ).
Antonariy , сложные примеры для меня, но тоже спасибо.
...
Рейтинг: 0 / 0
28.07.2013, 14:50
    #38346624
lanzer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример когда нужно чтобы функция присваивалась переменной.
jszПочитайте тут хотя бы, раздел "Именованные функциональные выражения".
Благодарствую.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Пример когда нужно чтобы функция присваивалась переменной. / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]