“ For In”可以遍历数组(值/属性/函数)。
let arr = [1,2,3,4];
arr.__proto__.con = function(){console.log('from array');}
for(let item in arr){
console.log(item);
}
Run Code Online (Sandbox Code Playgroud)
结果将是:
1,2,3,4,con
Run Code Online (Sandbox Code Playgroud)
为什么不打印“ toString” /“ split”之类的本机功能?有什么不同?
在我看来,它们(con和toString)都属于Array的原型。
小智 3
该for...in声明...
迭代对象的所有非Symbol、可枚举属性。(来源:MDN)
但是,如果您查看ECMA 规范,在“数组原型对象的属性”项中,您会看到:
数组原型对象是内在对象%ArrayPrototype%。Array 原型对象是一个 Array 奇异对象,并且具有为此类对象指定的内部方法。它有一个 length 属性,其初始值为 0,其属性为 { [[Writable]]: true, [[Enumerable]]: false , [[Configurable]]: false }。
这适用于concat,,,,,等等......filtermapforEachsorttoString
您可以使用Object.getOwnPropertyDescriptor它来检查这些属性。例如:
console.log(Object.getOwnPropertyDescriptor(Array.prototype, "concat"));Run Code Online (Sandbox Code Playgroud)
最后,要设置这些方法{enumerable: false},请查看其他答案。
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |