Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.07.2017, 16:06
Аспирант
Отправить личное сообщение для Tanya51 Посмотреть профиль Найти все сообщения от Tanya51
 
Регистрация: 09.07.2017
Сообщений: 49

Анонимная функция
задача:
Создайте объект user с полем name. Создайте функцию format с параметрами start и end:
function format(start, end) {
    console.log(start + this.name + end);
}


Привяжите функцию format() к объекту user таким образом, чтобы ее вызов возвращал отформатированное имя пользователя
userFormat('<<<', '>>>'); // <<<John>>>


Реализуйте 2 версии текущего задания, используя:
1. Анонимную функцию;
2. Метод bind().


Метод bind у меня получился
function bind(func, context) {
  return function() { 
    return func.apply(context, arguments);
  };
}

var user={
  name: 'John',
};

function format(start, end) {
  console.log( start + this.name + end );
}

var userFormat = bind(format, user);

userFormat('<<<','>>>');



А вот как реализовать это же с помощью анонимной функции не понимаю. помогите пожалуйста
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2017, 17:45
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

var user={
	name: 'John',
	userFormat: function(start, end){
		return start + this.name + end;
	}
};
console.log(user.userFormat('<<<','>>>'));
Ответить с цитированием
  #3 (permalink)  
Старый 23.07.2017, 17:49
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

если методом нельзя то так
userFormat = function(start, end){
	return start + this.name + end;
};

var user={
	name: 'John',
	userFormat: userFormat
};
console.log(user.userFormat('<<<','>>>'));
Ответить с цитированием
  #4 (permalink)  
Старый 24.07.2017, 20:04
Аспирант
Отправить личное сообщение для Tanya51 Посмотреть профиль Найти все сообщения от Tanya51
 
Регистрация: 09.07.2017
Сообщений: 49

Сообщение от j0hnik Посмотреть сообщение
если методом нельзя то так
userFormat = function(start, end){
	return start + this.name + end;
};

var user={
	name: 'John',
	userFormat: userFormat
};
console.log(user.userFormat('<<<','>>>'));

А это анонимная функция?
userFormat = function(start, end){
    return start + this.name + end;
};


как я поняла с учебника по JS вот это анонимная функция
function(){

//какой-то код

}

Последний раз редактировалось Tanya51, 24.07.2017 в 20:12.
Ответить с цитированием
  #5 (permalink)  
Старый 24.07.2017, 23:04
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Раз имени нет, значит анонимная.
Ответить с цитированием
  #6 (permalink)  
Старый 25.07.2017, 18:49
Аспирант
Отправить личное сообщение для Tanya51 Посмотреть профиль Найти все сообщения от Tanya51
 
Регистрация: 09.07.2017
Сообщений: 49

Спасибо)
Ответить с цитированием
  #7 (permalink)  
Старый 25.07.2017, 21:46
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Сообщение от j0hnik Посмотреть сообщение
Раз имени нет, значит анонимная.
Не верно. В данном случае функциональное выражение присваивается переменной значит это не анонимная функция.
Ответить с цитированием
  #8 (permalink)  
Старый 25.07.2017, 23:13
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от MallSerg Посмотреть сообщение
Не верно. В данном случае функциональное выражение присваивается переменной значит это не анонимная функция.
спорить не буду, информация почему то везде разная, даже на этом сайте статья есть https://javascript.ru/basic/functions
Как тогда привязать функцию к объекту? помогите Тане решить задачу.
Ответить с цитированием
  #9 (permalink)  
Старый 26.07.2017, 11:18
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Вопрос крайне холиварный =). В основном все крутится вокруг двух тезисов:

1й тезис после ключевого слова function нет имени значит функция анонимная ( т.е. классификация по наличию признака имени ).
2й тезис функцию нельзя вызвать из других мест программы т.к. нет ссылки (имени функции) ( т.е. классификация по поведению).

Четкого определения в стандарте нет так что любые домыслы допустимы =).
Лично для меня первое определение имеет мало смысла и бесполезно а второе полезно и логично для описания поведения логики программы.
Так же стоит отменить что для меня определение анонимности может зависеть от контекста в котором исполняется код
т.е. внутри она вполне может быть доступна через ссылку или имя (именованное функциональное выражение) т.е. функция не анонимна а снаружи не доступна через ссылку или имя т.е. недоступна/анонимна.

Для меня задание не логично т.е. привязать и сохранить анонимность невозможно.

Но если сильно требуют можно забить на логику и присвоить переменной результат работы выражения которое вернет ссылку на функцию.

Последний раз редактировалось MallSerg, 26.07.2017 в 11:58.
Ответить с цитированием
  #10 (permalink)  
Старый 30.07.2017, 01:56
Новичок на форуме
Отправить личное сообщение для EugeneBash Посмотреть профиль Найти все сообщения от EugeneBash
 
Регистрация: 30.07.2017
Сообщений: 1

Можно так:
//oбъект c полем name
var user = {
   name: "Tom"
};

//функция format с параметрами start и end
function format(start, end) {
   console.log(start + this.name + end);
}

//привязка контекста с помощью анонимной функции
var tomFormat = function(start,end){
					format.apply(user,[start,end])
				}
tomFormat("<<<", ">>>"); // <<<Tom>>>

//привязка контекста с помощью метода bind()
var tomFormat2 = format.bind(user)
tomFormat2("<<<", ">>>");
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция вызывается несколько раз KiberQ Общие вопросы Javascript 11 01.03.2017 15:45
Анонимная функция в обработчике события rolleyes Javascript под браузер 0 02.12.2015 13:05
Анонимная функция в условии Petesso Общие вопросы Javascript 9 28.09.2014 21:13
не вызывается функция при изменении option soft4you Общие вопросы Javascript 1 23.07.2014 17:41
AJAX функция для новых html-элементов broadcast77 AJAX и COMET 25 03.03.2014 14:01