Böyle yapabilirsin
var a, b
var foo = {
a: a = 5,
b: b = 6,
c: a + b
}
Bir işlevin başlangıçta bildirildiği nesneye başvurmam gerektiğinde bu yöntemin benim için yararlı olduğu kanıtlanmıştır. Aşağıdaki nasıl kullandığımın minimal bir örneğidir:
function createMyObject() {
var count = 0, self
return {
a: self = {
log: function() {
console.log(count++)
return self
}
}
}
}
Kendini yazdırma işlevini içeren nesne olarak tanımlayarak, işlevin bu nesneye başvurmasına izin verirsiniz. Bu, başka bir yere geçirmeniz gerekiyorsa yazdırma işlevini bir nesneye 'bağlamanız' gerekmeyeceği anlamına gelir.
Bunun yerine, this
aşağıda gösterildiği gibi kullanın
function createMyObject() {
var count = 0
return {
a: {
log: function() {
console.log(count++)
return this
}
}
}
}
Ardından aşağıdaki kod 0, 1, 2'yi kaydeder ve bir hata verir
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 yöntemini kullanarak, işlevin hangi bağlamda çalıştırıldığına bakılmaksızın, baskının her zaman aynı nesneyi döndüreceğini garanti edersiniz. Yukarıdaki kod iyi çalışır ve kendi sürümünü kullanırken 0, 1, 2 ve 3 günlüğünü işler createMyObject()
.