Создать метод функции
Доброго времени суток. Как создать метод функции? Т.е. чтобы было на подобие этого:
func().method(); Давно видел подобную тебе на этом форуме, но сейчас найти не смог. Буду рад, если кините ссылку или дадите ответ в этой теме. |
На самом деле в данном случае это будет не метод функции, а метод того, что вернула функция. Метод функции это func.method().
А так простейший ваниант: function func(a){ return { method: function(b){alert(a + ' ' + b)} } } func('Hello').method('world!') Естесно в рабочем коде лишние объекты\функции не плодятся каждый раз, а возвращается ссылка. |
Почти всегда так делаю
http://javascript.ru/forum/misc/4962...tml#post326928 Такой механизм создает замыкание он позволяет сохранять переменные в функции что позволяет не засирать глобальную область видимости и избегать конфликтов да и сам вызов методов через цепочку .x().y().z() прост удобен и понятен |
Aetae,
Спасибо, буду знать |
|
рони,почитаю обязательно
|
Подскажите пожалуйста.
Если мне нужно вызвать функцию без метода, можно ли метод не возвращать без необходимости? Например в jQuery $('#el') возвращает элемент а $('#el').method('') применяет методы к этому элементу. Или как правильно это называется? |
HJ90,
ещёб понять чего ты хочешь? :-? |
Цитата:
Вот задумал написать функцию которая бы например что-то возвращала. И добавить ей методы которые при вызове дополнительно бы обрабатывали результ функции. Но чтобы методы относились именно к этой функции а не глобально ко всем. Пример из этого топика от Aetae всегда возвращает объект с методами еслы сделать просто func('Hello'). |
|
HJ90,
var Some = function () {}; Some.prototype.method1 = function () { console.log(1); return this; }; Some.prototype.method2 = function () { console.log(2); return this; }; Some.prototype.method3 = function () { console.log(3); return this; }; var some = new Some(); some.method1().method2().method3().method1().method2().method3();//... |
tsigel, спасибо за ответ!
Но вот Some('') или some('') отдельно как функцию мы уже не можем использовать. Только вместе с методами. Как же в jquery это сделано... $('#el') $('#el').method('') Ведь $ это обычная функция а всякие css, attr - объекты внутри этой функции |
HJ90,
var $ = function (some) { if (!(this instanceof $)) { return new $(some); } console.log(some); }; $.prototype.method1 = function () { console.log(1); return this; }; $.prototype.method2 = function () { console.log(2); return this; }; $.prototype.method3 = function () { console.log(3); return this; }; $('test').method1().method2().method3().method1().method2().method3();//... $('test').method1(); var t = $('test'); t.method2(); |
tsigel, о! ..То что я хотел.
2 дня потратил и без толку. Но меня уже затянуло разобраться в этом. Спасибо большое за пример! |
Часовой пояс GMT +3, время: 08:45. |