JavaScript propiedad del objeto adquirido de varias maneras

prefacio

JavaScript Object adquirió más métodos de propiedad, pero cada método son diferentes escenarios, con el fin de explicar la situación, se supone que la siguiente

let c = Symbol.for('这是实例上的属性');
let e = Symbol.for('这是原型上的属性');
let obj = {a:1,b:2,[c]:5};
Reflect.setPrototypeOf(obj,{
  fn:2,
  [e]:8
})
Object.defineProperties(obj,{
  d:{
    value:6,
    enumerable:false
  }
})

Object.keys ()

Object.keys(obj).forEach(prop=>{
  console.log(prop);
})
//a
//b

Obtiene un objeto en sí mismo atributo de instancia, pero no incluye una clave de símbolos

Object.getOwnPropertySymbols ()

console.log('-----------------获取symbol键')
Object.getOwnPropertySymbols(obj).forEach(prop=>{
  console.log(prop);
})
// -----------------
// Symbol(这是实例上的属性)

Para la adquisición de teclas de símbolos, ni la obtención de prototipos

Object.getOwnPropertyNames ()

console.log('-----------------不管枚举或者不可枚举都会获取')
Object.getOwnPropertyNames(obj).forEach(prop=>{
  console.log(prop);
})
//a
//b
//d

Sea o no numerable recibirá, todavía no incluye teclas de símbolos

for ... in

for(const prop in obj){
  console.log(prop);
}
//a
//b
//fn

La obtención de la propiedad seguirá recibiendo el prototipo, por lo que utilizar el método iterativo requiere una cuidadosa si se requiere propiedades en el prototipo, usando el método iterativo puede agregar una instancia de objeto hasOwnPropertyjuez

for(const prop in obj){
  if(obj.hasOwnProperty(prop)){
    console.log(prop);
  }
}
//a
//b
Publicado 85 artículos originales · ganado elogios 62 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/qq_36754767/article/details/104339608
Recomendado
Clasificación