Цитата:
Цитата:
Метод toString() применим к функциям. |
Tranquill, Не у всех функций можно получить тело. Тело недоступно для родных функций и функций полученных через bind , так что вариант сразу можно отметать.
Ну а чтобы не разделять код, на секции из методов и их атрибутов(полей), можно воспользоваться самописной утилитой наследования, в которой вместо мтетодов задаётся объект с самим методом и набором полей поумолчанию. Подобное извращение я видел в ExtJS, так что можно посмотреть в качестве примера. Только там поля методов не использовались, кроме name . Как что смело можно начинать сочинять костыль реализующий эту задумку и оформить его в виде отдельной JS библиотеки. Так же напоминаю, что arguments.callee хоть и поддерживается, но не рекомендуется, так как считается устаревшим, и надо это учесть. |
Похоже я забыл сказать, что методы, которые хочется помечать, полностью под моим контролем. Виноват-с :)
Речь не идет о том, что объект приходит откуда-то извне и я пытаюсь работать с его методами. Напротив, объект мой и методы тоже мои. То есть проблемы с нативными функциями и bind нет. |
Цитата:
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]);
}
}
|
Еще одного человека покусал сишарп и он стал недееспособен как кодер. Сишарп калечит разработчиков ((.
нет нужды в 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]);
}
}
|
| Часовой пояс GMT +3, время: 10:51. |