function App(){
// `data` тоже в прототип можно вынести
}
App.prototype = {
data: 'Привет ',
method: function(name){
alert(this.data + ', ' + name + '!');
}
};
var app = new App();
app.method('Маша');
<span id='icon' data-src='../image.png'></span>
#icon { content: url(data-src); /* ... */ }
$('#icon').data('../baz.png');
$('style').text('#icon:before { content: url(baz.png); }').appendTo('body')
sql_values = a
.reduce(function(aggr, x){
if (x.enabled)
aggr.push(x.value)
return aggr;
}, [])
.join(', ')
;
function find(title, poll, parent){
parent = parent || poll;
if (poll.title === title)
return parent;
var result;
poll.reply && poll.reply.some(function(reply){
return reply.poll && (result = find(title, reply.poll, poll)) || false;
});
return result;
}
find('Вопрос 2', mass.poll);
function changeDelegate(diff) {
return function(event) {
var $count = $(this)
.parent('div')
.children('.count')
,
mc = $count.text();
$count.text(parseInt(mc, 10) + diff);
};
}
$('.plus')
.click(changeDelegate(1));
$('.minus')
.click(changeDelegate(-1));
var Validations = {
number: function(val) {
return typeof val === 'number';
}
};
function AbstractModel() {
for (var field in this.fields)
Object.defineProperty(this, field, createAccessor(field));
}
function createAccessor(field) {
var private_;
return {
get: function() {
return private_;
},
set: function(value) {
if (Validations[this.fields[field]](value))
private_ = value;
},
enumerable: true,
configurable: true
}
}
// usage
function FooModel() {
AbstractModel.call(this);
}
FooModel.prototype = {
fields: {
age: 'number'
}
};
var foo = new FooModel;
foo.age = 'test1';
console.log('>>', foo.age); // >> undefined
foo.age = 10;
foo.age = 'test2'
console.log('>>', foo.age); // >> 10
$.fn.pluginName = function(handler) {
var self = this;
$(document)
.on('change', function(event) {
if (self.index(event.target) === -1)
return;
handler(event);
});
return this;
};
`Валидаторы и Нормализаторы`. Первое - обычно, для каждой модели у нас отдельный entity (класс) с валидаторами, а так же при получение данных, в пост запросе например, мы их нормализуем - вот похожий ответ.
Это популярная проблема, все пытаются с ней бороться, придумывают разные инструменты, библиотеки и прочее. Но скажу, что при хорошей архитектуре вложенность функций редко переваливает за 2 штуки - а это уже никакой не `хэл`. Ну вот посмотрите на метод в котором у вас этот самый `хэл`. Это же явное нарушение SOLID - один метод обрабатывает данные, куда-то их посылает, ждет в коллбэке ответ, с ним что-то делает, потом снова вызывает другую асинхронную функцию и опять ждет ответ, и так несколько раз. Поэтому `коллбэк хэл` - это классная штука, которая помогает разбивать код на независимые функции - принял данные, что-то сними сделал, отправил дальше как эти данные, так и другие аргументы. Точка.