Javascript'te obj.method()
numaralı telefonu aradığınızda, yöntem obj
olarak geçer. Bu nedenle document.getElementById('x')
numaralı telefonu arayarak this
değerini document
olarak ayarlayın. Sadece f = document.getElementById
yazarsanız
Ancak artık işleve yeni referansı var, ama bu referans artık document
için "bağlı" dır.
Yani kodunuz çalışmaz, çünkü f
'u çıplak işlev adı olarak çağırdığınızda, genel nesneye bağlı olarak sona erer (window
). Fonksiyonun içgüdüleri this
'u kullanmayı denediğinde, artık document
yerine window
olduğunu ve şaşırtıcı bir şekilde bunun hoşuna gitmediğini fark eder. Açıkça f
çağırır fakat
var x = f.call(document, 'x');
document
bağlam ayarlar:
Sen
bunu dersek
f
işi yapabilir.
var f = document.getElementById.bind(document);
ve doğru olarak bağlamı ayarlar kendi sarıcı oluşturmak için gerçekten sadece bir genelleştirilmiş kestirme:
Bunu düzeltmek için başkalarının yolu ES5 yalnızca kullanılabilir Function.bind()
kullanmaktır
belgede 'Söz konusu yanıtı,' this' netleştirmek için:
Babel Bu veriyor .getElementById() '' document' iken, kapsamınızı yürütürken bu 'global', yani '' '' 'window' nesnesidir. –