Ви могли це зробити так
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 як об'єкт, що містить функцію print, ви дозволяєте функції посилатися на цей об’єкт. Це означає, що вам не доведеться «прив’язувати» функцію друку до об’єкта, якщо вам потрібно передати його десь в іншому місці.
Якщо ви замість цього використовуєте, 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, ви гарантуєте, що друк завжди поверне той самий об'єкт незалежно від контексту, в якому виконується функція. Код, наведений вище, буде виконуватись добре і входитиме 0, 1, 2 і 3 при використанні самовиробничої версії createMyObject()
.