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一样).有没有办法不在数组中显示原型函数?
一种方法是使用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)