1. Анализ проблем

if (a == 1 && a == 2 && a == 3) {
  console.log('Win')
}

Как распечатать Вин?

На первый взгляд я был в шоке. Как могла возникнуть такая противоречивая ситуация? Это эквивалентно тому, как человек может быть ребенком, взрослым или пожилым человеком?

Когда я успокоюсь и найду какие-то подсказки.

Не сказано, что A равно 1 2 3 одновременно.

А JS работает в один поток. Даже если они написаны в строчку, это выполняется слева направо. Таким образом, они не относятся к одному и тому же периоду времени и пространства.

Поскольку это не вещь одного периода, конечно, человек может быть ребенком, потом взрослым, а потом стать пожилым человеком.

Возвращаясь к теме, то я хочу сделать это условие установленным, поэтому мне нужно получить один раз, пусть он будет увеличен на 1.

2. Решение

2.1 в строку

Первый метод заключается в использовании метода Тостринга [скрытого преобразования] в процессе суждения. Почему другая статья? [] ==! [] Результат верен?

const a = {
  _a: 0,
  toString: function() {
    return ++_a
  }
}

Запустите один раз, добавьте 1 к _a, а затем вернитесь.

Поскольку Tostring является методом по умолчанию для Object.prototype, этот метод эквивалентен перехвату метода Tostring при обычном скрытом преобразовании.

Проблема может быть решена, но она порождает новые проблемы. Что, если они заменят два знака равенства на три знака равенства. Здесь toString уже по умолчанию конвертирует объекты в строки. С toStirng результат не сохраняется.

2.2 определение свойств

Перехват данных с помощью объектов:

Object.defineProperties(window, {
  _a: {
    value: 0,
    writable: true
  },
  a: {
    get: function() {
      return  ++_a
    }
  }
})

Связанный контент, связанный с объектом объекта

3. Резюме

Нет смысла задавать этот вопрос на собеседовании. Но вы можете понять, что точки знаний, содержащиеся в этом вопросе интервью, очень интересны.
Преобразование от скрытых типов к прототипу и цепочке прототипов и, наконец, к доступу доступа к объекту. Если вы хотите продолжить расширение, принцип двусторонней привязки VUE, реализация статики в классе и т. д. точки знаний к другим связанным точкам знаний.

Наконец, если в приведенной выше статье есть какое-то неясное место, пожалуйста, укажите на него, я надеюсь, что это может помочь всем в определенной степени, и я с нетерпением жду ваших следующих, спасибо за вашу поддержку~

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.

Повысьте узнаваемость и признание вашего технического стартапа с помощью Circuit.