Вы могли бы сделать это так
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.