控制台输入
Object.getOwnPropertyNames(document)
// ["location"]
Object.getOwnPropertyNames(document.__proto__)
// ["constructor"]
为什么只有一个属性被输出了
控制台输入
Object.getOwnPropertyNames(document)
// ["location"]
Object.getOwnPropertyNames(document.__proto__)
// ["constructor"]
为什么只有一个属性被输出了
你应该多往下试一试,Object.getOwnPropertyNames
只会获取到对象自身的属性,不会获取到原型上的document
原型关系:HTMLDocument
-> Document
-> Node
-> EventTarget
-> Object
const fn = proto => {
if (!proto) return []
let arr = Object.getOwnPropertyNames(proto).map((name)=>({name, proto:proto.constructor.name}))
return arr.concat(fn(proto.__proto__))
}
const properties = fn(document); // 获取原型链上所有可枚举属性
properties.find(p => p.name==="URL")
// {name: "URL", proto: "Document"}
// URL是Document原型上的属性
properties.find(p => p.name==="baseURI")
// {name: "baseURI", proto: "Node"}
// baseURI是Node原型上的属性
13 回答12.8k 阅读
8 回答2.6k 阅读
2 回答5.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
5 回答848 阅读
3 回答2.1k 阅读
5 回答1.1k 阅读✓ 已解决
你这是啥浏览器……
(最后那个 jQuery 可以忽略,显然是思否打包的时候把 jQuery 挂到 document 上了)