Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 13.04.2017, 22:56
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от Tranquill
Может как-то по-другому можно?
В случае с безымянной функцией, никак ничего к ней не присобачить...

Сообщение от Tranquill
получить тело функции, посмотреть на ее первую строчку и попробовать найти в ней специальным образом отформатированный комментарий
Такое вполне работоспособно.
Метод toString() применим к функциям.
Ответить с цитированием
  #12 (permalink)  
Старый 13.04.2017, 23:09
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

Tranquill, Не у всех функций можно получить тело. Тело недоступно для родных функций и функций полученных через bind , так что вариант сразу можно отметать.
Ну а чтобы не разделять код, на секции из методов и их атрибутов(полей), можно воспользоваться самописной утилитой наследования, в которой вместо мтетодов задаётся объект с самим методом и набором полей поумолчанию. Подобное извращение я видел в ExtJS, так что можно посмотреть в качестве примера. Только там поля методов не использовались, кроме name .
Как что смело можно начинать сочинять костыль реализующий эту задумку и оформить его в виде отдельной JS библиотеки.
Так же напоминаю, что arguments.callee хоть и поддерживается, но не рекомендуется, так как считается устаревшим, и надо это учесть.
Ответить с цитированием
  #13 (permalink)  
Старый 13.04.2017, 23:23
Новичок на форуме
Отправить личное сообщение для Tranquill Посмотреть профиль Найти все сообщения от Tranquill
 
Регистрация: 13.04.2017
Сообщений: 6

Похоже я забыл сказать, что методы, которые хочется помечать, полностью под моим контролем. Виноват-с
Речь не идет о том, что объект приходит откуда-то извне и я пытаюсь работать с его методами. Напротив, объект мой и методы тоже мои. То есть проблемы с нативными функциями и bind нет.
Ответить с цитированием
  #14 (permalink)  
Старый 09.06.2017, 22:47
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Tranquill Посмотреть сообщение
Уже думал о таком варианте, но тут плохо то, что нет локальности.
То есть функция в одном месте объявляется, а помечается где-то в другом.
Такое трудно поддерживать будет. Может как-то по-другому можно?
var obj = { 
  f1: function() { return 1; }, 
  f2: (function(f) { f[Symbol.for("My Favorite Function")] = true; return f; })(function() { return 2; }),
  g1: function() { return 3; },
  h1: 'not a function'   
};

for (var key in obj) { 
  if (    obj.hasOwnProperty(key)
       && typeof(obj[key]) == 'function' 
       && Symbol.for("My Favorite Function") in obj[key]
      ) {
    console.log('Special function found: %s', obj[key]);
  }
}
Ответить с цитированием
  #15 (permalink)  
Старый 11.06.2017, 15:43
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Еще одного человека покусал сишарп и он стал недееспособен как кодер. Сишарп калечит разработчиков ((.

нет нужды в Symbol.for(он предназначен для других задач) проще просто добавить атрибут к анонимной функции а потом проверять его

такой код до ужаса кривой и неправильный тут плохо все )).

var obj = {
  f1: function() { return 1; },
  f2: ( (f)=> { return f.atr=true , f ;})(function() { return 2; }), 
  g1: function() { return 3; },
  h1: 'not a function'  
};
 
for (var key in obj) {
  if (    obj.hasOwnProperty(key)
       && typeof(obj[key]) == 'function'
       && obj[key].atr == true
      ) {
      alert ( 'Special function found: %s  == ' +key +" -> "+ obj[key] );
    //console.log('Special function found: %s', obj[key]);
  }
}

Последний раз редактировалось MallSerg, 11.06.2017 в 15:49.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расширение для Safari. Как вызвать функцию из popover в global page? housewm Opera, Safari и др. 0 21.12.2013 06:07
передать анонимную функцию, вызывающую другую функцию с нужными параметрами Ваяс Общие вопросы Javascript 5 21.02.2013 20:12
Выполнить функцию заранее неизвестную Neokortex jQuery 2 13.02.2012 12:41
checkbox включен запускаем одну функцию выключен другую Sadist_dead Элементы интерфейса 11 27.09.2011 10:46
проблема с передачей параметров в функцию bartonom Элементы интерфейса 4 19.09.2011 12:41