Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.01.2016, 12:50
Аспирант
Отправить личное сообщение для diga Посмотреть профиль Найти все сообщения от diga
 
Регистрация: 13.01.2016
Сообщений: 57

Надо вызывать функцию внутри другой функции
Доброго времени суток, как вызвать функцию
onDrop внутри init. Каким образом его можно изменить чтоб все работало?
Буду очень рад любой помощи
var init = function() {
  var board,
  game = new Chess();

  var onDrop = function(source, target) {
    var move = game.move({
      from: source,
      to: target,
      promotion: 'q'	 
    });
    if (move === null) return 'snapback';
    updateStatus();
  };

  var onSnapEnd = function() {
    board.position(game.fen());
  };
	
  var cfg = {
    position: 'start',
    onDrop: onDrop,
    onSnapEnd: onSnapEnd
  };

  $('#surrender').click(function(){
	$('#surrender').hide();
  });


};

Последний раз редактировалось diga, 30.01.2016 в 13:22.
Ответить с цитированием
  #2 (permalink)  
Старый 30.01.2016, 14:09
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

может так?
<script>
var func1 = function(){
			var func2 = function(){
				alert('Hello from func2');	
			}
			return func2;
	}
	var q = func1();
	q();
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 30.01.2016, 14:39
Аспирант
Отправить личное сообщение для diga Посмотреть профиль Найти все сообщения от diga
 
Регистрация: 13.01.2016
Сообщений: 57

Сообщение от destus Посмотреть сообщение
может так?
в данном случае вызывается первая функция, внутри которой выполняется вторая, в моем случае надо вызвать именно вторую, нужно делать через объекты, но у меня не получается
Ответить с цитированием
  #4 (permalink)  
Старый 30.01.2016, 15:28
Аватар для Lemme
Профессор
Отправить личное сообщение для Lemme Посмотреть профиль Найти все сообщения от Lemme
 
Регистрация: 15.07.2015
Сообщений: 511

Нужно вызвать функцию2, которая объявлена в функции1 - не вызывая функцию1?

Никак.


Нужно вызвать функцию2, которая объявлега в функции1.


var bar;

function foo() {
	bar = function() {
  	alert('bar');
  } 
};

foo();
bar();

Последний раз редактировалось Lemme, 30.01.2016 в 15:32.
Ответить с цитированием
  #5 (permalink)  
Старый 30.01.2016, 15:31
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Сообщение от diga Посмотреть сообщение
в данном случае вызывается первая функция, внутри которой выполняется вторая, в моем случае надо вызвать именно вторую, нужно делать через объекты, но у меня не получается
Чтобы не выполнялся остальной код, а вызывалась именно вложенная функция, можно параметром передавать в первую функцию что именно надо.

<script>
		var func1 = function(param){
			var func2 = function(){
					alert('Hello from func2');	
				}
			switch (param)
			{
				case 'func2': 
				return func2();
				break;
				
				default: /* всё остальное */
					alert('Hello from func1');
			}
		}
		func1('func2');
</script>
Ответить с цитированием
  #6 (permalink)  
Старый 30.01.2016, 15:44
Аспирант
Отправить личное сообщение для diga Посмотреть профиль Найти все сообщения от diga
 
Регистрация: 13.01.2016
Сообщений: 57

я хотел сделал таким образом:
function init() {
  var board,
  game = new Chess();

  function onDrop(source, target) {
    var move = game.move({
      from: source,
      to: target,
      promotion: 'q'	 
    });
    if (move === null) return 'snapback';
  };

  onDrop.set = function(source, target) {
    var move = game.move({
      from: source,
      to: target,
      promotion: 'q'	 
    });
    if (move === null) return 'snapback';
  };
  
  var onSnapEnd = function() {
    board.position(game.fen());
  };	
	
  var cfg = {
    draggable: true,
    position: 'start',
    onDrop: onDrop,
    onSnapEnd: onSnapEnd
  };

  var board = ChessBoard('board', cfg);

}

т.е. добавил метод для функции, но когда вызываю я:
onDrop.set(параметры)
выдает ошибку:
Uncaught TypeError: Cannot read property 'set' of undefined
Ответить с цитированием
  #7 (permalink)  
Старый 30.01.2016, 15:47
Аспирант
Отправить личное сообщение для diga Посмотреть профиль Найти все сообщения от diga
 
Регистрация: 13.01.2016
Сообщений: 57

Сообщение от Lemme Посмотреть сообщение
Нужно вызвать функцию2, которая объявлена в функции1 - не вызывая функцию1?

Никак.


Нужно вызвать функцию2, которая объявлега в функции1.


var bar;

function foo() {
	bar = function() {
  	alert('bar');
  } 
};

foo();
bar();
т.е. мне надо глобально объявить переменную? в моем случае мне кажется это не очень корректно.
Попробовал выдает ошибку:
Uncaught TypeError: onDrop is not a function(…)


Я хочу добиться того, чтоб можно было ходить фигурами используя консоль, т.е. чтоб у меня была возможность набрать команду, и фигуры переместилась, мне для этого нужно вызвать ту самую функцию и передать определенные параметры

Последний раз редактировалось diga, 30.01.2016 в 15:57. Причина: дополнил
Ответить с цитированием
  #8 (permalink)  
Старый 30.01.2016, 16:06
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Сообщение от diga Посмотреть сообщение
т.е. мне надо глобально объявить переменную? в моем случае мне кажется это не очень корректно.
Попробовал выдает ошибку:
Uncaught TypeError: onDrop is not a function(…)

В js используется лексическая область видимости. Это означает, что внутренняя функция определена как свойство обьекта вызова внешней. Нельзя вызвать внутренню функцию, не вызвав внешнюю, потому что обьект вызова внешней функции еще не создан.
Ответить с цитированием
  #9 (permalink)  
Старый 30.01.2016, 16:12
Аспирант
Отправить личное сообщение для diga Посмотреть профиль Найти все сообщения от diga
 
Регистрация: 13.01.2016
Сообщений: 57

Сообщение от destus Посмотреть сообщение
В js используется лексическая область видимости. Это означает, что внутренняя функция определена как свойство обьекта вызова внешней. Нельзя вызвать внутренню функцию, не вызвав внешнюю, потому что обьект вызова внешней функции еще не создан.
код показывают расстановку шахматных фигур на доске, и если ход был сделан не правильно то фигура возвращается на свое исходное положение, я хотел добиться возможности сделать ход используя консоль, т.е. чтоб я мог вызвать функцию и передать ей нужные аргументы после чего моя фигура переместилась бы..
а за ход и перемещение отвечает та функция, которую я пытался вытащить, может есть какие нибудь методы реализовать это? или каким нибудь образом переделать функцию в объект?
Ответить с цитированием
  #10 (permalink)  
Старый 30.01.2016, 16:51
Аватар для Lemme
Профессор
Отправить личное сообщение для Lemme Посмотреть профиль Найти все сообщения от Lemme
 
Регистрация: 15.07.2015
Сообщений: 511

https://learn.javascript.ru/prototypes

Последний раз редактировалось Lemme, 30.01.2016 в 16:56.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача аргументом функции функцию Brainsss Общие вопросы Javascript 20 17.11.2014 16:12
Импортирование функции в функцию arimanecro Общие вопросы Javascript 2 17.10.2014 18:54
htmlparser2. Надо выдернуть только тест внутри тега. singaporian Общие вопросы Javascript 3 08.08.2013 21:31
Сложение переменных в другой функции inexwai jQuery 3 30.04.2013 11:33
Переписать из вне функцию, находящуюся внутри другой функции балерун Общие вопросы Javascript 10 15.04.2011 14:13