Анонимная функция
задача:
Создайте объект 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, время: 04:10. |