如何防止原型显示在数组上

PCo*_*lho 0 javascript arrays prototype

我想用我自己的一些函数扩展Array功能.这工作正常.但是,我注意到在控制台中,函数被"附加"到数组中,就好像它们是数据一样.

小提琴:http://jsfiddle.net/BxfCy/1/

这是代码,因为stackoverflow迫使我发布(只需单击小提琴):

a = [1,2,3];

Array.prototype.doMagic = function(){
    var returnvar = this;
    returnvar.push(42);
    return returnvar;
}

console.log(a);

for (var n in a){
    console.log(a[n]);
}
Run Code Online (Sandbox Code Playgroud)

我的想法是其他数组函数没有显示在数组中(你知道,像push一样).有没有办法不在数组中显示原型函数?

Mat*_*all 5

一种方法是使用Object.hasOwnProperty():

for (var n in a){
    if (a.hasOwnProperty(n)) {
        console.log(a[n]);
    }
}
Run Code Online (Sandbox Code Playgroud)

更好的方法是对数组使用正确的迭代习惯用法:

for (var i=0; i<a.length; i++){
    console.log(a[i]);
}
Run Code Online (Sandbox Code Playgroud)

或者用于Object.defineProperty使doMagic属性不可枚举:

Object.defineProperty(Array.prototype, 'doMagic', {
    enumerable: false,
    configurable: false,
    writable: false,
    value: function(){
        var returnvar = this;
        returnvar.push(42);
        return returnvar;
    }
});
Run Code Online (Sandbox Code Playgroud)