MySQL от 5 до 8 запросов миграции (переписать) - переменные в выражениях

Вы могли бы сделать это так

var a, b
var foo = {
    a: a = 5,
    b: b = 6,
    c: a + b
}

Этот метод оказался полезным для меня, когда мне пришлось обратиться к объекту, из которого была объявлена ​​функция. Ниже приведен минимальный пример того, как я его использовал:

function createMyObject() {
    var count = 0, self
    return {
        a: self = {
            log: function() {
                console.log(count++)
                return self
            }
        }
    }
}

Определив self как объект, содержащий функцию печати, вы позволяете функции ссылаться на этот объект. Это означает, что вам не нужно «связывать» функцию печати с объектом, если вам нужно передать ее в другое место.

Если бы вы использовали this, как показано ниже

function createMyObject() {
    var count = 0
    return {
        a: {
            log: function() {
                console.log(count++)
                return this
            }
        }
    }
}

, то следующий код будет записывать 0, 1, 2, а затем дать ошибку

var o = createMyObject()
var log = o.a.log
o.a.log().log() // this refers to the o.a object so the chaining works
log().log() // this refers to the window object so the chaining fails!

Используя метод self, вы гарантируете, что печать всегда будет возвращать один и тот же объект независимо от контекста, в котором выполняется функция. При использовании собственной версии createMyObject() приведенный выше код будет работать только отлично и log 0, 1, 2 и 3.

1
задан Jimmix 23 March 2019 в 22:25
поделиться

1 ответ

Альтернативы:

  1. Используйте CTE, как показано в ответах на ваш предыдущий вопрос.
  2. Извлеките все результаты в ваше приложение и вычисляйте значения постепенно, используя код, а не SQL.
0
ответ дан Bill Karwin 23 March 2019 в 22:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: