Se você estiver familiarizado com a função Ember.String.fmt do Ember , compreenderá rapidamente como isso funciona:
"Hello %@ %@".fmt("John", "Doe");
// "Hello John Doe"
"Hello %@2, %@ 1".fmt("John", "Doe");
// "Hello Doe, John"
Nos bastidores, chama:
Ember.String.fmt("Hello %@ %@", ["John", "Doe"]);
Ember.String.fmt("Hello %2 %@ 1", ["John", "Doe"]);
Você acha que poderíamos nos livrar desses colchetes para que pareçam mais naturais e possam ser usados como uma função auxiliar em vez de poluir o protótipo do String? Nós definitivamente poderíamos!
Ember.String.fmt("Hello %@ %@", "John", "Doe");
Ember.String.fmt("Hello %@2, %@ 1", "John", "Doe");
Não leu bem? Esta é a implementação:
Ember.String.fmt = function (string /*, arg1, arg2, ..., argn */) {
var formats;
var index;
formats = Array.prototype.slice.call(arguments, 1);
index = 0;
return string.replace(/%@([0-9]+)?/g, function (match, argumentIndex) {
argumentIndex = (argumentIndex) ? parseInt(argumentIndex, 10) - 1 : index++;
match = formats[argumentIndex];
return ((match === null) ? '(null)' : (match === undefined) ? '' : match).toString();
});
};
O principal aqui é:
Array.prototype.slice.call(arguments, 1);
Ele simplesmente converte o arguments
objeto em um array e remove o primeiro elemento (que é a string que queremos formatar).
"John"
, "Doe"
nos bastidores torna-se um array novamente, mas a API definitivamente parece mais natural e tem uma boa leitura sem colchetes! Isso foi simples, não foi?