Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.01.2017, 12:25
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Доступ к аргументам Функции со стороны её Методов
Метод .on() функции Main() не может получить доступ к item, переданному в неё. Знаю, что в jQuery есть функция $, в которую передается аргумент, с которым затем работают методы. Открыв исходник jQuery и увидев код, мне захотелось закрыть его, что я и сделал. Вот решил обратиться к Вам на форум!

<!doctype html>

<div>
  <div id='square'></div>
</div>

<style>
  #square {
    width: 100px;
    height: 100px;
    background-color: #ea8181;
  }
</style>

<script>
  function Main(item) {
    if (typeof item == 'string') {
      alert('Item is not element');
      return;
    }
    this.elem = item;
  }

  Main.prototype.on = function(event, handler) {
    this.elem.addEventListener(event, handler);
  }

  function show(e) {
    alert(e.target);
  }

  Main(square).on('click',show);
</script>


Покажите, пожалуйста, как правильно делаются подобные вещи?
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 21.01.2017, 13:17
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Teamur,
new Main(square).on('click',show);

или
function Main(item) {
	if (!(this instanceof Main)){
		return new Main(item);
	}
    if (typeof item == 'string') {
      alert('Item is not element');
      return;
    }
    this.elem = item;
  }
Ответить с цитированием
  #3 (permalink)  
Старый 21.01.2017, 15:02
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

destus,
А в jQuery тоже это делается через new?

Хотелось бы без new ).

Одна главная функция и куча методов к ней!

Как еще можно реализовать! Предложите, пожалуйста, еще варианты!

Вопрос совместимости со старыми браузерами не стоит, поэтому если это как-то можно укоротить, используя es6, 7, 8 и тд, я только ЗА!

И еще подвопрос: А можно нпр, чтобы главная функцию вернула объект с методами?
Ответить с цитированием
  #4 (permalink)  
Старый 21.01.2017, 15:17
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от Teamur Посмотреть сообщение
А в jQuery тоже это делается через new?
Да, и делается как здесь.
Сообщение от Teamur Посмотреть сообщение
А можно нпр, чтобы главная функцию вернула объект с методами?
Там и есть объект с методами, которые в прототипе, который общий у всех этих объектов, что экономит память.
Ответить с цитированием
  #5 (permalink)  
Старый 21.01.2017, 15:26
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Цитата:
А в jQuery тоже это делается через new?
Если ты заменишь ф-цию Main из 2 поста, new можно не писать при вызове. Вот тебе как в jQuery https://github.com/jquery/jquery/blo.../event.js#L517
Ответить с цитированием
  #6 (permalink)  
Старый 21.01.2017, 15:45
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Teamur, и jQuery на es5 написано.
Ответить с цитированием
  #7 (permalink)  
Старый 21.01.2017, 15:56
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

destus,
Rise,
Спасибо, товарищи!
Я как обычно пооткрывал 50 вкладок и утонул в каше!
Если ещё как-то можно улучшить) код, буду рад ответам!
Ответить с цитированием
  #8 (permalink)  
Старый 21.01.2017, 16:15
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

А можно как-то обойтись без постоянной записи this.elem this.elem this.elem?
Ответить с цитированием
  #9 (permalink)  
Старый 21.01.2017, 16:36
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Teamur, зачем?
Ответить с цитированием
  #10 (permalink)  
Старый 21.01.2017, 16:44
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Компактизация, минификация...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
доступ к lexical environment функции FeelUs Общие вопросы Javascript 7 07.09.2016 18:00
Доступ к функции из другого js файла sitesv Events/DOM/Window 3 29.04.2013 16:28
дать человеческие названия аргументам функции float Общие вопросы Javascript 6 27.04.2011 10:27
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21