Node.js
Binding
JS ve C++ arası binding öğrenirsin.
Binding
Binding, bir JS fonksiyonunu native koda bağlama işlemidir. Native taraf fonksiyonu çağırır, JS tarafı sonucu döndürür. Bir bindFunction(name, fn) fonksiyonu bunu modeller: fonksiyonun adını ve parametre sayısını (arity) kaydeder.
fn.length bir JS fonksiyonunun tanımlı parametre sayısını verir. Örnek: function(a, b) { return a + b; } için .length 2 olur. bindFunction('add', add) {name: 'add', arity: 2} döndürür. Binding sırasında native taraf bu bilgileri kullanır: ad ile çağırır, arity ile parametre sayısını denetler. Bu, native ve JS arasındaki köprünün temelidir. Çıktı add: 2 olur; ad ve parametre sayısı tek satırda.
Arity nedir?
Arity, bir fonksiyonun beklediği parametre sayısıdır. JavaScript'te fn.length ile alınır. Örnek: function(a, b) {...} için .length 2'dir. Varsayılan parametreli fonksiyonlarda .length yalnızca varsayılan olmayan parametreleri sayar.
Binding sırasında arity önemli: native taraf yanlış parametre sayısıyla çağrı yapmaz. bindFunction('add', add), add'in arity'sini 2 olarak kaydeder; native taraf bunu okur. console.log(bindFunction('add', add).name + ': ' + bindFunction('add', add).arity) add: 2 yazdırır. Bu, binding'in en temel denetimidir: ad ve parametre sayısı. Gerçek N-API'de napi_get_cb_info ile gerçek parametreler alınır ama arity kaydı yine de kullanışlıdır.
Uygulama Binding fonksiyonu yaz
function bindFunction(name, fn) yaz. {name: name, arity: fn.length} döndür. const add = function(a, b) { return a + b; } tanımla. console.log(bindFunction('add', add).name + ': ' + bindFunction('add', add).arity) yazdır.
Örnek çözümü göster
function bindFunction(name, fn) {
return {name: name, arity: fn.length};
}
const add = function(a, b) { return a + b; };
console.log(bindFunction('add', add).name + ': ' + bindFunction('add', add).arity);
Kendini test et
-
Kavramı açıklamasına eşle
- Binding
- JS ve native arasında köprü
- fn.length
- Parametre sayısı
- arity
- Parametre sayısı adı
- name
- Fonksiyon adı
-
function(a, b) { return a + b; }.length ne dir?
function(a, b) { return a + b; }.length
Cevabı göster
2 — İki parametre (a, b) tanımlı, .length 2 olur.
-
arity değerini tamamla
return {name: name, arity: fn.____};
Cevabı göster
return {name: name, arity: fn.length};
Sıradaki ders: Callback