Анонимная функция
задача:
Создайте объект 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('<<<','>>>'); А вот как реализовать это же с помощью анонимной функции не понимаю. помогите пожалуйста |
var user={ name: 'John', userFormat: function(start, end){ return start + this.name + end; } }; console.log(user.userFormat('<<<','>>>')); |
если методом нельзя то так
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(){ //какой-то код } |
Раз имени нет, значит анонимная.
|
Спасибо)
|
Цитата:
|
Цитата:
Как тогда привязать функцию к объекту? помогите Тане решить задачу. |
Вопрос крайне холиварный =). В основном все крутится вокруг двух тезисов:
1й тезис после ключевого слова function нет имени значит функция анонимная ( т.е. классификация по наличию признака имени ). 2й тезис функцию нельзя вызвать из других мест программы т.к. нет ссылки (имени функции) ( т.е. классификация по поведению). Четкого определения в стандарте нет так что любые домыслы допустимы =). Лично для меня первое определение имеет мало смысла и бесполезно а второе полезно и логично для описания поведения логики программы. Так же стоит отменить что для меня определение анонимности может зависеть от контекста в котором исполняется код т.е. внутри она вполне может быть доступна через ссылку или имя (именованное функциональное выражение) т.е. функция не анонимна а снаружи не доступна через ссылку или имя т.е. недоступна/анонимна. Для меня задание не логично т.е. привязать и сохранить анонимность невозможно. Но если сильно требуют можно забить на логику и присвоить переменной результат работы выражения которое вернет ссылку на функцию. |
Можно так:
//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("<<<", ">>>"); |
Часовой пояс GMT +3, время: 02:37. |