Проверьте, существует ли свойство класса при вызове из объекта в NodeJs - PullRequest
0 голосов
/ 03 апреля 2020

Я работаю над nodeJs Здесь я создаю class и хочу, чтобы, когда любое вызываемое свойство, которого нет в этом классе, оно выводило предупреждение в консоли, как я могу это сделать? Может быть, использую какую-то функцию класса, но я ничего не могу найти.

Аудио класса

class User {
 constructor(name, age){
    this.name = name;
    this.age = age;
 }
}


// Calling the class 
user = new User('name', 25);
user.height; // This value not exist in class

Я хочу напечатать предупреждение в консоли, когда кто-то вызывает свойство height, которого нет в классе, возможно ли это, если да, пожалуйста дай мне знать.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Вы можете использовать Обработчик получения прокси , чтобы проверить, имеет ли целевой объект свойство:

class User {
  constructor(name, age){
    this.name = name;
    this.age = age;
  }
}


const handler = {
  get: function(target, prop, receiver) {
    if (!Reflect.has(target, prop)) {
      console.log(`Property ${String(prop)} does not exist`)
    }
    return Reflect.get(...arguments);
  }
}

user = new Proxy(new User('name', 25), handler);

console.log(user.height);
0 голосов
/ 03 апреля 2020

Это неправильный способ сделать это, используя JavaScript. Вы можете использовать метод hasOwnProperty, чтобы проверить, существует ли свойство.

user = new User('name', 25);
if(user.hasOwnProperty('height')){
   user.height; // This value not exist in class
} else {
console.error("Property does not exist on object")
}

Еще один способ - использовать метод класса для доступа к любому свойству.

class User {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  getProperty(name) {
    if (this.hasOwnProperty(name)) {
      return this[name];
    } else {
        console.log(`property ${name} does not exist on object`)
    }
  }
}

// Calling the class 
user = new User('name', 25);
user.getProperty('name') // name
user.getProperty('height'); // This value not exist in class

...