Calço
Se você estiver familiarizado com o padrão do adaptador, saberá o que é um calço. Shims intercepta chamadas de API e cria uma camada abstrata entre o chamador e o destino. Normalmente, os calços são usados para compatibilidade com versões anteriores. Por exemplo, o pacote es5-shim npm permitirá que você escreva a sintaxe do ECMAScript 5 (ES5) e não se importa se o navegador está executando o ES5 ou não. Tome Date.now como um exemplo. Esta é uma nova função no ES5, onde a sintaxe no ES3 seria nova Date (). GetTime () . Se você usar o es5-shim, poderá escrever Date.now e, se o navegador em que estiver executando suportar o ES5, ele será executado. No entanto, se o navegador estiver executando o mecanismo ES3, o es5-shim interceptará a chamada para Date.nowe apenas retorne new Date (). getTime () . Essa interceptação é chamada shimming. O código-fonte relevante de es5-shim é semelhante a este:
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
Polyfill
Polyfilling é realmente apenas uma versão especializada de shimming. O Polyfill é sobre a implementação de recursos ausentes em uma API, enquanto que um calço não seria necessariamente tanto sobre a implementação de recursos ausentes quanto sobre a correção de recursos. Eu sei que isso parece muito vago, mas onde os calços são usados como um termo mais amplo, o polyfill é usado para descrever os calços que fornecem compactação retroativa para navegadores mais antigos. Portanto, enquanto os calços são usados para encobrir pecados antigos, os polyfills são usados para trazer aprimoramentos futuros de volta no tempo.
Como exemplo, não há suporte para sessionStorage no IE7, mas o polyfill no pacote sessionstorage npm adicionará esse recurso no IE7 (e mais antigo) usando técnicas como armazenamento de dados na propriedade name da janela ou cookies.