• Kод на JavaScript для синтаксического разбора конфигурационных файлов (.conf)?

    mnasyrov
    @mnasyrov
    Попробуйте написать свой парсер с использованием peg.js. Это генератор парсеров на основе PEG-грамматик, которые похожи на регулярные выражения.
    Ответ написан
    Комментировать
  • Синтезатор речи

    mnasyrov
    @mnasyrov
    Ответ написан
    Комментировать
  • Проблема с замыканиями в javascript?

    mnasyrov
    @mnasyrov
    var onload_js = [];
    
    onload_js.push({
    	"src": ["script1.js"],
    	"callback": function() { callback1(); }
    });
    
    onload_js.push({
    	"src": ["script2.js", "script3.js"],
    	"callback": function() { callback23(); }
    });
    
    function myCoolLoader() {
    	for (var i = 0; i < onload_js.length; i++) {		
    		var scripts = onload_js[i];		
    	
    		for (var j = 0; j < scripts.src.length; j++) {
    			var url = scripts.src[j];
    			
    			$.getScript(url, function() {
    				if (/*Здесь проверка что все остальные скрипты загружены тоже*/) {
    					scripts.callback();
    				}
    			});
    		}
    	}
    }
    
    Ответ написан
  • JavaScript: что делает Function.call.apply(…)?

    mnasyrov
    @mnasyrov
    Всё просто :). Цель этого трюка — написать обёртку foo(), которая вызывает bar() в указанном контексте context и с переданными аргументами arg1, arg2 без лишних теложвижений.

    В традиционном виде, это выглядело бы так

    function bar(arg1, arg2) {}

    function foo(context, arg1, arg2) {
    bar.call(context, arg1, arg2);
    }


    Или так для произвольного числа аргументов:

    function bar() {}

    function foo() {
    var context = arguments[0];
    var args = Array.prototype.slice.call(arguments, 1); //делаем массив аргументов для bar
    bar.apply(context, args);
    }


    Вместо этого салата использовать трюк с call.apply:

    function foo() {
    Function.call.apply(bar, arguments);
    }


    Работает это так: aplly вызывает Function.call на объекте bar c переданными в foo параметрами. То есть получаем следующее для самого первого примера с context и arg1, arg2:

    bar.call(context, arg1, arg2)

    Что нам и нужно.
    Ответ написан
    Комментировать