Ale*_*hul 5 javascript for-loop prototype
我trigger在对象原型中添加了一个方法:
Object.prototype.trigger = function() {
// ...
return this;
};
Run Code Online (Sandbox Code Playgroud)
然后有一个“ for in”循环:
var obj = { 4: 15, 10 : 41, 11 : 46, 12 : 51, 20 : 74 }
for( item in obj ) {
foo( obj[item] );
}
Run Code Online (Sandbox Code Playgroud)
但是此循环有6次迭代,而不是5次。最后一次迭代使用key:
item = "trigger"
Run Code Online (Sandbox Code Playgroud)
为什么循环遍历__proto__对象的一部分?

for..in迭代原型链上任何位置的所有可枚举属性。如果您想使其trigger不可枚举,因此不使用 进行迭代for..in,请Object.defineProperty改为使用,这使得定义的属性默认情况下不可枚举:
Object.defineProperty(Object.prototype, 'trigger', { value: function() {
}});
var obj = { 4: 15, 10 : 41 }
for( item in obj ) {
console.log(item);
}Run Code Online (Sandbox Code Playgroud)