Получите доступ к этому в функции, которая является свойством объекта

название может быть неясным, поэтому вот пример того, чего я пытаюсь достичь:

const myObj = {
  propA: 'foo',
  propFunc: (arg) => arg + this.propA
}

По сути, одним из свойств моего объекта является функция, и я хочу, чтобы эта функция имела доступ к другим свойствам объекта.

Я хочу сделать это так, чтобы я мог динамически изменять значение или propA и иметь propFunc доступ к новому значению после вызова.

Итак, я могу определять новые переменные следующим образом, просто переопределяя propA и не переопределяя propFunc:

const myObj2 = {...myObj, propA: 'bar' };

Как и ожидалось, компилятор недоволен моим использованием этого.

Можно ли это сделать или нет? Спасибо

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Стрелочные функции не имеют собственного контекста this, они наследуют значение this из окружающей области.

Вы можете попробовать это:

const myObj = {
  propA: 'foo',
  propFunc: function(arg) {
    return arg + this.propA;
  }
}

or the shorthand :

const myObj = {
  propA: 'foo',
  propFunc(arg) {
    return arg + this.propA;
  }
}

console.info(myObj.propFunc('hello')); // Output: "hellofoo"

const myObj2 = {...myObj, propA: 'bar' };

console.info(myObj2.propFunc('hello')); // Output: "hellobar"

Я знаю, что стрелочные функции не имеют к этому доступа, и я знал, что в этом проблема, но почему-то мой мозг не подумал об использовании синтаксиса функции, сегодня пятница. Кажется, сокращение propA(arg) {return arg + this.propA;} тоже работает. Спасибо

elcye 30.08.2024 11:03

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