Encontrou um problema interessante ao tentar passar uma variável String primitiva como o contexto durante uma .apply
chamada. A primitiva String foi autoboxed para um objeto String.
Aqui está um exemplo disso:
function boxing() { return this; }
var test = 'test';
boxing.apply(test) === 'test'; // will return false
Quando a test
variável é passada como contexto usando a função apply, ela é encaixotada no objeto String real, não no primitivo.
A maneira de fazer com que esse autoboxing não ocorra é colocar:
use strict;
declaração na parte superior do seu arquivo. Isso impedirá que o vm faça o autoboxing do contexto na .apply
função.