Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.03.2015, 00:05
Новичок на форуме
Отправить личное сообщение для n199a Посмотреть профиль Найти все сообщения от n199a
 
Регистрация: 23.03.2015
Сообщений: 7

Непонятен синтаксис addEventListener()
1) Что означает в методе document.addEventListener() параметр function()?
2) Вопрос в комментарии //ЧТО ПРОИСХОДИТ ТУТ?

document.addEventListener('DOMContentLoaded', function () {
	settings = JSON.parse(localStorage.settings);
	document.getElementById('showClear').checked = settings.showClear;	//значение чекбокса равно значению чекбокса showClear из функции	save()
	document.getElementById('showClear').addEventListener('click', save); //ЧТО ПРОИСХОДИТ ТУТ?
}

Последний раз редактировалось n199a, 24.03.2015 в 00:33.
Ответить с цитированием
  #2 (permalink)  
Старый 24.03.2015, 06:35
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от n199a
параметр function()
Не поверишь, но это ФУНКЦИЯ! Мы передаем вторым параметром ФУНКЦИЮ!
Сообщение от n199a
//ЧТО ПРОИСХОДИТ ТУТ?
На элемент #showClear навешивается функция save в качестве обработчика события click
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 24.03.2015, 10:38
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

Сообщение от n199a
ЧТО ПРОИСХОДИТ ТУТ?
Думаю, под капотом происходит что-то вроде:
print=console.log.bind(console)

Event={
 create: function(name){
  var o=Object.create(this)
  o.elements=[]
  o.name=name
  window[name]=o
 },
 add: function(el){this.elements.push(el)},
 activate: function(){this.action(); this.notify()},
 notify: function(){var name=this.name; this.elements.forEach(function(el){el["on"+name]()})}
}

Event.create("printWorld")
printWorld.action=function(){print("World, ")}

SomeElement={
 create: function(){return Object.create(this)},
 addEventListener: function(event, fnc){window[event].add(this); this["on"+event]=fnc}
}


helloElement=SomeElement.create()
helloElement.addEventListener("printWorld", function(){print("Hello!")})

goodbyeElement=SomeElement.create()
goodbyeElement.addEventListener("printWorld", function(){print("Bye!")})


printWorld.activate()

//  World, 
//  Hello!
//  Bye!
Ответить с цитированием
  #4 (permalink)  
Старый 24.03.2015, 12:12
Новичок на форуме
Отправить личное сообщение для n199a Посмотреть профиль Найти все сообщения от n199a
 
Регистрация: 23.03.2015
Сообщений: 7

Сообщение от danik.js Посмотреть сообщение
Не поверишь, но это ФУНКЦИЯ! Мы передаем вторым параметром ФУНКЦИЮ!
Но функция создается так:
function NAME() {}

А в параметре указано просто function(). Как узнать, какая функция?
Ответить с цитированием
  #5 (permalink)  
Старый 24.03.2015, 12:43
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

Сообщение от n199a
Но функция создается так:
нет. Ф-ция создается так
function(){}

или так
new Function
или проcто
Function()

а в выражении
function NAME() {}

у Вас создается функция, на нее навешивается с-во name, в глобальном объекте создается с-во NAME, которому присваивается значение объекта созданной Вами ф-ции (проще говоря -- сама ф-ция)

Последний раз редактировалось newuser1001, 24.03.2015 в 12:47.
Ответить с цитированием
  #6 (permalink)  
Старый 24.03.2015, 12:46
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

Сообщение от n199a
Как узнать, какая функция?
Не понятно, что имеется в виду под "узнать", но если вам нужна просто именованная ф-ция, Вы можете написать
element.addEventLitener("event", function NAME(){})
Ответить с цитированием
  #7 (permalink)  
Старый 24.03.2015, 13:08
Новичок на форуме
Отправить личное сообщение для n199a Посмотреть профиль Найти все сообщения от n199a
 
Регистрация: 23.03.2015
Сообщений: 7

Сообщение от newuser1001 Посмотреть сообщение
Не понятно, что имеется в виду под "узнать", но если вам нужна просто именованная ф-ция, Вы можете написать
element.addEventLitener("event", function NAME(){})
А все, разобрался. Метод addEventLitener вызовет объект function(). Сама же эта функция и её тело идет сразу же в методе. Мои глаза
Ответить с цитированием
  #8 (permalink)  
Старый 24.03.2015, 14:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от n199a
А в параметре указано просто function(). Как узнать, какая функция?
Значит это функция без имени. Она так и называется - анонимная.

Вообще, есть два типа функций:
// функция-объявление
function example() {}
Тут это как некая конструкция. Объявляется функция. Как в других языках объявляется, допустим класс.

// функция-выражение
var example = function example() {}

// это более гибкая штука. Это как любой другой тип: число, строка, объект. Оно так и есть, ибо все это и есть выражение.

alert(1 + 2) // аргументом передали выражение

alert(1) // аргументом тоже передали выражение, только очень простое

alert(function example(){}) - аргументом передали выражение.

У функции выражения может не быть имени:

alert(function(){}) // анонимная функция - функция без имени


Зато ее можно присвоить в переменную и дальше юзать как обычную функцию-объявление:

var example = function(){}
// теперь в переменной example хранится ссылка на функцию:

example();// вызвали функцию

alert(example)
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятен синтаксис nahkar Общие вопросы Javascript 2 02.02.2014 12:54
addEventListener и return false; Valdemor Общие вопросы Javascript 4 17.07.2013 11:33
Что за синтаксис Arkasha69 Общие вопросы Javascript 4 26.05.2011 16:13
записать переменную в ссылку (синтаксис) 2rION Общие вопросы Javascript 3 09.08.2009 21:46
Синтаксис языка javascript multimetr Я не знаю javascript 2 26.05.2009 23:34