Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
С давних времён использую декораторы в JavaScript
object = {x: 10, add: function(y) {return this.x + y;}}
// хотим отследить все вызовы object.add откуда угодно
object.add = function(f) {
return function() {console.log(arguments); return f.apply(this, arguments)}
}(object.add);
console.log(object.add(2));
object.add = logged(object.add)
logged = function(f) {
return function() {console.log(arguments); return f.apply(this, arguments)}
};
cache = {}
function autocomplete(query, callback)
{
if (cache[query]) {
callback(cache[query]);
return;
}
$.get('search', {query: query}, function(result) {
cache[query] = result;
callback(result);
}
}
function f_cached(...) {
return cache[query] || cache[query] = f(...);
}function withVars(func, some_more_args){
var args = Array.prototype.slice.call(arguments, 1); //для передачи группы аргументов
return function(){
func.apply(null, args.slice.call(arguments, 0).concat(args)); //сцепляем 2 группы аргументов
}
};Так же читать намного проще?function withVars(func, variables){
return (function(a){
return function(){
func.apply(null, a.slice.call(arguments, 0).concat(a));
}
})(Array.prototype.slice.call(arguments, 1))
};
(Но это, думаю, читать сложнее, а делает то же самое.)@classmethod
def foo(arg1,arg2):
...
@accepts(int,int)
@returns(float)
def bar(low,high):
...
и аналогичного кода на JavaScript.
Декораторы в JavaScript