Nick Franceschina Nick Franceschina - 2 months ago 12
Javascript Question

Javascript: hiding prototype methods in for loop?

So lets say I've added some prototype methods to the Array class:



Array.prototype.containsKey = function(obj) {
for(var key in this)
if (key == obj) return true;
return false;
}

Array.prototype.containsValue = function(obj) {
for(var key in this)
if (this[key] == obj) return true;
return false;
}




then I create an associative array and attempt to loop through it's keys:



var arr = new Array();
arr['One'] = 1;
arr['Two'] = 2;
arr['Three'] = 3;

for(var key in arr)
alert(key);



this returns five items:

-One
-Two
-Three
-containsKey
-containsValue


but I want (expect?) only three. Am I approaching this wrong? is there a way to "hide" the prototype methods? or should I be doing something differently?

Answer

You can use JavaScript's hasOwnProperty method to achieve this in the loop, like this:

for(var key in arr) {
    if (arr.hasOwnProperty(key)) {
        ...
    }
}

Reference: This YUI blog article.

Comments