Я поиграл с JavaScript, расширяющим его функциональность, но заметил некоторое поведение, которого я на самом деле не хочу.
возьмите этот пример:
String.prototype.capitalize = function()
{
return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } );
};
Object.prototype.sizeof = function()
{
var counter = 0;
for(index in this)
{
console.info(index);
counter++;
}
return counter;
};
var animals = {cow: 'moo', duck: 'quack'}
animals.sizeof();
console.info(' ');
var stirngs = "yay";
for(i in stirngs) console.info(i);
Будет выводить:
code
duck
sizeof
0
1
2
capitalize
sizeof
Я получаю, что распечатка всех объектов показывает sizeof, так как я только что сделал это объектом и аналогично со строкой, так как строка является объектом, поэтому к нему прикрепляются объекты как прописной, так и sizeof.
Вопрос в том, почему я не вижу другие объекты JavaScript, такие как toLowerCase, я предполагаю, что это как-то связано с расширением через прототип. В любом случае, чтобы эти парни не появлялись таким образом, это мешает другим функциям, которые я пишу.