js {}与class属性描述符的区别

let data = {
  name: "ajanuw",
  change() {
    this.name = "Ajanuw";
  },
  get message() {
    console.log(this);
    return "hello " + this.name;
  },
};
console.log( Object.getOwnPropertyDescriptors(data) );
{
  name: {
    value: 'ajanuw',
    writable: true,
    enumerable: true,
    configurable: true
  },
  change: {
    value: [Function: change],
    writable: true,
    enumerable: true,
    configurable: true
  },
  message: {
    get: [Function: get message],
    set: undefined,
    enumerable: true,
    configurable: true
  }
}
class Ajanuw {
  name = "ajanuw";
  constructor() {
    this.name = "suou";
  }
  change() {
    this.name = "Ajanuw";
  }
  get message() {
    return "hello " + this.name;
  }
}
let data = new Ajanuw();
console.log( Object.getOwnPropertyDescriptors(data) );
console.log( Object.getOwnPropertyDescriptors( Object.getPrototypeOf(data) ) );
{
  name: {
    value: 'suou',
    writable: true,
    enumerable: true,
    configurable: true
  }
}
{
  constructor: {
    value: [class Ajanuw],
    writable: true,
    enumerable: false,
    configurable: true
  },
  change: {
    value: [Function: change],
    writable: true,
    enumerable: false,
    configurable: true
  },
  message: {
    get: [Function: get message],
    set: undefined,
    enumerable: false,
    configurable: true
  }
}
原文地址:https://www.cnblogs.com/ajanuw/p/14163363.html