Как создать самоисполняющуюся анонимную функцию в объекте?

#javascript #typescript #ecmascript-6 #commonjs

Вопрос:

в моем объекте

 let obj = {
  name:["Harry","Scren","Docis","Altab"],
  age:[32,44,22,55]
}
 

Мне нужно записать самоисполняющуюся анонимную функцию в объекте, которая при вызове любого элемента объекта будет выполнять эту самоисполняющуюся анонимную функцию и будет проверять, равна ли длина обоих массивов (имя и возраст) или нет, если не равно, то выдаст ошибку …..Мне нужно что-то вроде

 let obj = {
  name:["Harry","Scren","Docis","Altab"],
  age:[32,44,22,55],

  (function(){
    if(name.length != age.length){
      throw new Error('both name and age 's length are not equal')
     }
    }()) // But this is not possible to create in object I have just showed down what I wanted to create
}
 

Как создать что-то подобное в объекте javascript ??

Комментарии:

1. Просто поместите IIFE вне литерала объекта и передайте obj.

2. Я почти уверен, что это проблема XY , и реальный ответ-это геттеры и сеттеры или прокси -сервер.

3. Зачем вам это нужно, если вы сами написали, что такое массивы? Можете ли вы привести динамический пример, в котором это имело бы смысл? Кроме того, у вас есть проблема синтаксиса со строковыми литералами.

4. Единственная проблема-это данные. Если имя и возраст связаны, используйте структуру, похожую на карту, как предложено в ответе. Вы также можете создать функцию проверки, чтобы проверить данные и выдать ошибку, если она неверна.

Ответ №1:

Я не уверен, но думаю, что это невозможно… Но позвольте мне задать вопрос: почему у вас есть объект, содержащий два массива? Разве не имеет смысла иметь массив obj, каждый элемент которого содержит одно имя и один возраст? Я покажу тебе

 const people = [
    { name: "Pearson 1", age: 20 },
    { name: "Pearson 2", age: 20 },
    { name: "Pearson 3", age: 20 },
    { name: "Pearson 4", age: 20 },
]
 

Таким образом, вам не нужно проверять длину, так как каждый объект имеет свое собственное поле имени и возраста.