String.prototype.repeat = function(n) {
return new Array(++n).join(this);
};
String.prototype.pad = function(requiredLength, paddingStr, paddingType) {
var n = requiredLength - this.length;
if (n) {
paddingType = paddingType ? paddingType.toLowerCase() : '';
paddingStr = paddingStr || ' ';
paddingStr = paddingStr.repeat( Math.ceil(n / paddingStr.length) ).substr(0, n);
if (paddingType == 'both') {
n /= 2;
return paddingStr.substr( 0, Math.ceil(n) ) + this + paddingStr.substr( 0, Math.floor(n) );
}
if (paddingType == 'left') {
return paddingStr + this;
}
return this + paddingStr;
}
return this;
};
// синтаксис аналогичен printf
// 'Привет, %s!'.format('мир') -> "Привет, мир!"
// '%.1s.%.1s. %s'.format('Иван', 'Иванович', 'Иванов') -> "И.И. Иванов"
String.prototype.format = function() {
var i = 0,
params = arguments;
return this.replace(/%(?:%|(?:(|[+-]+)(|0|'.+?)([1-9]\d*)?(?:\.([1-9]\d*))?)?(s|d|f))/g, function(match, sign, padding, width, precision, type) {
if (match == '%%') {
return '%';
}
var v = params[i++];
if (type == 'd') {
v = Math.round(v);
}
else if (type == 'f') {
v = v.toFixed(precision ? precision : 6);
}
if (/\+/.test(sign) && v > 0) {
v = '+' + v;
}
v += '';
if (type != 'f' && precision) {
v = v.substr(0, precision);
}
if (width) {
v = v.pad(width, padding == '' ? ' ' : padding[0] == "'" ? padding.substr(1) : padding, /-/.test(sign) ? 'right' : 'left');
}
return v;
});
};
// this.name = 'Вася';
// console.log( 'Привет, ${name}!'.template(this) );
// "Привет, Вася!"
String.prototype.template = function(context) {
return this.replace(/\$\{(.*?)\}/g, function(match, name) {
return context[name];
});
};
Я видел, как это делалось в обоих направлениях. Все, что вы делаете, - это создаете переменную с именем «$ selector», поэтому они функционально эквивалентны. Самое приятное в этом то, что это позволяет легко выделить их как объекты jQuery.
$
- это просто имя - имена в JavaScript могут содержать знаки доллара и могут состоять только из знака доллара.
Использование знака доллара в своем имени не имеет отношения к jQuery - в знаке доллара нет ничего особенного, кроме того, что jQuery определяет функцию с именем $
.
Знак наличных - это просто псевдоним для функции jQuery. Начало имени переменной с $ не влияет на эту переменную.
Однако обычно, особенно при разработке плагинов jQuery, использовать переменные, уже заключенные в jQuery, с денежным знаком, поэтому вы знаете, что можете вызывать методы jQuery, не имея чтобы обернуть их.
Мне нравится добавлять к именам всех моих объектов jQuery префикс $
, чтобы я знал, что это на самом деле объект jQuery, а не ссылка на DOM.
Это хорошее соглашение об именах.
RichieHindle верен. Чтобы расширить:
Переменные Javascript допускают использование символа «$». Так, например, у вас может быть следующее:
var $i = 1;
var i = 1;
И i, и $ i имеют одинаковое значение, и оба являются вполне допустимыми именами переменных.
jQuery присваивает себе (объекту jQuery) '$', потому что традиционно это то, что фреймворки Javascript сделали для селекторов. «$» Не имеет внутреннего значения, кроме того, что дает ему jQuery.
Ага.
jQuery всегда возвращает объект jQuery. Это то, что позволяет создавать цепочки.
Вы уже определили переменную, чтобы получить обратно объект jQuery, поэтому $ не требуется
«$» - это функция в jQuery. Таким образом, когда вы вызываете $ (selector), вы фактически вызываете функцию $
с селектором
в качестве аргумента.
Как правило, не используйте "$" как часть имени переменной для javascript. Вы только запутаете себя.
Я не верю, что вам нужно добавлять селектор jQuery к объектам jQuery (поскольку он уже является частью объекта). Селектор не добавляем и проблем не возникало.