原因:js使用原型链实现方法时,这个方法默认是可迭代的,所以在遍历时就会被遍历出来,
例:
- Array.prototype.remove = function(n){
- return this.slice(0,n).concat(this.slice(n+1,this.length));
- }
-
- var cc = ["cccaaaa","ccccccccccc"];
- for(var key in cc){
- console.log(key,cc[key]);
- }
'运行
输出结果是:

解决方案:
使用Object.defineProperty方法设置对象的属性

- Array.prototype.remove = function(n){
- return this.slice(0,n).concat(this.slice(n+1,this.length));
- }
-
- Object.defineProperty(Array.prototype,"remove",{
- enumerable:false,
- });
-
- var cc = ["cccaaaa","ccccccccccc"];
- for(var key in cc){
- console.log(key,cc[key]);
- }
'运行
输出结果:

或者是对于对象本身设置
- var obj = {};
- obj.test = function(){console.log("ccccccccccc");};
- obj.age = 15;
-
- for(var key in obj){
- console.log(key,obj[key]);
- }
'运行
输出结果:

设置test方法不被迭代
-
- var obj = {};
- obj.test = function(){console.log("ccccccccccc");};
- obj.age = 15;
-
- Object.defineProperty(obj,"test",{
- enumerable:false,
- });
-
- for(var key in obj){
- console.log(key,obj[key]);
- }
'运行
输出结果:
