Как передать свойство класса в блок .each, вложенный внутри class> method> each в NodeJS?

Интересно, как я могу передать свойство класса в функцию, расположенную в каждом из методов, как показано ниже. Я обнаружил, что могу вызвать свойство из вновь созданного экземпляра, но это означает, что класс не может быть реплицирован. Есть ли удобный способ наследования объектов для вызова свойства класса изнутри функции, расположенной в function> .each> method> class?

class ok {
  constructor() {
    this.jojo = "first state";
  }

  myMethod() {
    let rp = require('request-promise-native');
    let cheerio = require('cheerio');
    rp("https://tomydna.com")
      .then(response => {

        let $ = cheerio.load(response);

        $('a').each(function() {
          this.jojo = "second state"; // This does not work
          ok1.jojo = "second state from outside"; // This would work but it is not good because it is related to one instance only. If a new Instance is created the method stops working.
          console.info(ok1.jojo); // will replicate as many times it finds url on the page.
        });


      });

  }

}

ok1 = new ok();
ok1.myMethod();
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
29
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете присвоить объект this другой переменной. Вы не можете использовать объект класса okthis в функции .each, потому что внутри .each он представляет текущий непосредственный объект (обратный вызов функции .each), следующий пример может вам помочь

class ok {

    constructor() {
        this.jojo = "first state";
    }

    myMethod() {
        let self = this;
        let rp = require('request-promise-native');
        let cheerio = require('cheerio');
        rp("https://tomydna.com")
            .then(response => {

                let $ = cheerio.load(response);

                $('a').each(function () {
                    self.jojo = "second state"; // This will work
                    ok1.jojo = "second state from outside"; // This would work but it is not good because it is related to one instance only. If a new Instance is created the method stops working.
                    console.info(ok1.jojo); // will replicate as many times it finds url on the page.
                });


            });

    }

}

ok1 = new ok();
ok1.myMethod();

Вы не можете объявить переменную в теле класса ...

adz5A 18.05.2018 11:21

спасибо @ adz5A, обновленный код

Arif Khan 18.05.2018 11:26

В обратном вызове .each вы можете использовать стрелочную функцию. Однако убедитесь, что если вы хотите иметь ссылку на узел cheerio dom, ваш обратный вызов имеет форму (index, node) => {/* your code */}.

это просто проблема объема. Назначьте this локальной переменной, а затем используйте ее внутри каждого. например:

  myMethod() {
    let that = this; //local variable
    let rp = require('request-promise-native');
    let cheerio = require('cheerio');
    rp("https://tomydna.com")
      .then(response => {

        let $ = cheerio.load(response);

        $('a').each(function() {
          that.jojo = "second state"; // usage
          console.info(that.jojo); 
        });


      });

  }

Другие вопросы по теме