Məzmuna keçin

JavaScript

JavaScript haqqında demək olar ki, hər şey

11 Mövzu 14 Yazı
  • JavaScript Regular ifadələr (Regex) bələdçisi

    regex
    1
    2
    1 Yazı
    42 Baxış
    Heç kim cavab yazmayıb
  • JavaScript-də Prototype Chain (Prototip Zənciri)

    proto prototype object chain
    3
    3 Yazı
    81 Baxış
    codexC
    Bu 10 sual vasitəsilə JavaScript-in prototype zənciri, __proto__, prototype, Object.create(), constructor funksiyalar və new-in daxili iş prinsipi ətraflı şəkildə izah olundu. Bu biliklər JavaScript-i daha dərin anlamaq və daha güclü tətbiqlər yazmaq üçün vacibdir. 1. Prototype zənciri nədir? Spoiler Cavab: Prototype zənciri — JavaScript obyektlərinin digər obyektlərdən metod və propertiləri irsi olaraq almasına imkan verən mexanizmdir. JavaScript-də hər obyektin __proto__ adlı gizli bir xassəsi olur və bu xassə həmin obyektin hansı digər obyektdən miras aldığını göstərir. Axtarılan property obyektin özündə yoxdursa, JavaScript həmin property-ni zəncir üzrə yuxarıdakı prototiplərdə axtarır. 2. __proto__ və prototype arasında fərq nədir? Spoiler Cavab: __proto__ — istənilən obyektin daxili [[Prototype]] (gizli irsi əlaqəsi) istinadıdır. prototype — yalnız constructor funksiyalara (məsələn, function A() {}) aid olan xassədir və new ilə yaradılmış obyektlərin __proto__su bu prototype-ə istinad edir. Sadə desək: const obj = new Constructor(); obj.__proto__ === Constructor.prototype // true 3. Aşağıdakı kodun nəticəsi nə olacaq? İzah edin. function Person(name) { this.name = name; } Person.prototype.greet = function() { return "Hello, " + this.name; }; const p1 = new Person("John"); console.log(p1.greet()); // ? console.log(p1.__proto__ === Person.prototype); // ? Spoiler Cavab: p1.greet() → "Hello, John" — çünki greet metodu Person.prototype-dədir. p1.__proto__ === Person.prototype → true — çünki new ilə yaradılmış obyektlərin __proto__su həmin constructor-un prototype-inə bərabər olur. 4. JavaScript-də __proto__ necə işləyir? Spoiler Cavab: JavaScript obyekt üzərində bir property tapmayanda, avtomatik olaraq __proto__ vasitəsilə onun prototipinə baxır. Bu proses zəncirvari davam edir — yuxarı prototiplərə baxılır — ta ki null-a çatana qədər (Object.prototype.__proto__ === null). 5. Bu kod niyə işləmir? const obj = { name: "Elvin", sayHi: function() { return "Hi " + this.name; } }; obj.prototype = function sayHi() { return "Hello " + this.name; }; obj.sayHi(); Spoiler Cavab: Burada səhv odur ki, obj adi obyekt olduğu üçün onun prototype property-si işləmir. prototype yalnız constructor funksiyalar üçün işləyir. Bu şəkildə olmalı idi: function Person(name) { this.name = name; } Person.prototype.sayHi = function() { return "Hello " + this.name; }; 6. Aşağıdakı kodun nəticəsi nə olacaq? Niyə? const animal = { eats: true }; const rabbit = Object.create(animal); rabbit.jumps = true; console.log(rabbit.eats); // ? console.log(rabbit.jumps); // ? console.log(animal.jumps); // ? Spoiler Cavab: rabbit.eats → true — irsi olaraq animal-dan gəlir rabbit.jumps → true — öz property-dir animal.jumps → undefined — çünki jumps yalnız rabbit-ə aiddir 7. Object.create() nədir və onu new əvəzinə nə vaxt istifadə edərik? Spoiler Cavab: Object.create(proto) — yeni bir obyekt yaradır və onun __proto__-sunu verdiyimiz proto obyektinə bağlayır. new ilə müqayisədə Object.create() bizə birbaşa prototipi təyin etməyə imkan verir. Əgər constructor funksiyadan istifadə etmiriksə, sadə obyekt irsiliyi üçün Object.create() daha uyğundur. 8. Bu kodun nəticəsi nədir? Niyə? function A() {} A.prototype = { sayHello: function() { return 'Hello from A'; } }; const obj = new A(); A.prototype = { sayHello: function() { return 'Hello from modified A'; } }; console.log(obj.sayHello()); Spoiler Cavab: obj.sayHello() → "Hello from A" Çünki obj yaradıldıqdan sonra A.prototype dəyişdirilsə də, obj artıq köhnə prototipi saxlayır. Yeni prototype ancaq sonrakı instansiyalara təsir edərdi. 9. new əməliyyatını özümüz necə implement edə bilərik? Spoiler Cavab: function myNew(Constructor, ...args) { const obj = {}; Object.setPrototypeOf(obj, Constructor.prototype); const result = Constructor.apply(obj, args); return typeof result === 'object' && result !== null ? result : obj; } Bu funksiyamız: Boş obyekt yaradır Onun __proto__sunu constructor-un prototype-inə bağlayır Constructor-u həmin obyektə this kimi tətbiq edir Əgər constructor obyekt qaytarmırsa, yeni obyekt qaytarılır 10. Bu kodun nəticəsi nə olacaq? Niyə dəyişir? const grandParent = { greet: function() { return "Hello from GrandParent"; } }; const parent = Object.create(grandParent); const child = Object.create(parent); parent.greet = function() { return "Hello from Parent"; }; console.log(child.greet()); delete parent.greet; console.log(child.greet()); Spoiler Cavab: Birinci console.log → "Hello from Parent" — çünki child.greet() zəncirdə parent-da tapılır İkinci console.log → "Hello from GrandParent" — çünki parent.greet silinib və JavaScript irsi olaraq grandParent-a baxır
  • JavaScript-də Spread və Rest operatorunun gücü

    spread rest operators
    1
    1 Yazı
    19 Baxış
    Heç kim cavab yazmayıb
  • JavaScript-də bind, call və apply metodları

    bind call apply this
    1
    1 Yazı
    34 Baxış
    Heç kim cavab yazmayıb
  • JavaScript-də Closure

    closure asinxron
    1
    1 Yazı
    18 Baxış
    Heç kim cavab yazmayıb
  • JavaScript-də hoisting

    hoisting tdz dəyişənlər functions
    1
    1 Yazı
    20 Baxış
    Heç kim cavab yazmayıb
  • JavaScript-də Iterators və Generators

    iterators functions generators symbol
    2
    2 Yazı
    54 Baxış
    codexC
    function* observerGenerator() { while (true) { console.log(`Value passed: ${yield}`); } } const obs = observerGenerator(); obs.next('first'); obs.next('second'); obs.next('third'); Gəlin bu generator funksiyasının necə işlədiyini addım-addım izah edək ki, niyə yalnız "second" və "third" dəyərləri ekrana çıxır, anlaşılsın. Addım-addım izah: Addım 1: Generator yaradılır const obs = observerGenerator(); Bu sətir observerGenerator generator funksiyasını başlatmır, sadəcə obs adlı generator obyektini yaradır. Addım 2: obs.next('first') Generator ilk dəfə next('first') ilə işə salınır. obs.next('first'); Vacib məqam: Generatorlar yield sətrinə çatana qədər kodu işlətməyə başlayır. Bizim generatorda ilk sətir bu olur: console.log(`Value passed: ${yield}`); Burada yield ifadəsi özündə dəyəri saxlayır, amma ilk dəfə next() çağırıldıqda, yield-ə verilən dəyər gözlənilmir, çünki generator hələ dayanmamışdı. Yəni obs.next('first') çağırıldıqda: Generator işə düşür, yield-ə gəlib dayanır, Amma yield-ə dəyər ötürülmür, ona görə də console.log(...) işləmir. Addım 3: obs.next('second') İndi isə yield artıq dayandığı yerdə gözləyir. Biz second dəyərini ötürürük: obs.next('second'); Bu dəyər birbaşa yield ifadəsinə ötürülür console.log(...) artıq işləyir və:Value passed: second Addım 4: obs.next('third') Bu dəfə eyni proses təkrar olunur: obs.next('third'); third dəyəri yenə yield-ə ötürülür, console.log(...) işləyir:Value passed: third Nəticə: Yalnız ikinci və üçüncü next() çağırışlarında console.log() işləyir, çünki: İlk next() generatoru yield-ə qədər aparır və heç bir dəyər ötürmür (sadəcə start verir). Sonrakı next(dəyər) çağırışları isə yield-ə dəyər ötürür və nəticədə console.log() işləyir. Qısa xülasə: next() çağırışı yield-ə nə ötürülür? Nəticə obs.next('first') Heç nə console.log() işləmir obs.next('second') 'second' Çıxış: Value passed: second obs.next('third') 'third' Çıxış: Value passed: third
  • JavaScript-də asinxronluq

    asinxron eventloop callstack promise
    1
    1 Yazı
    28 Baxış
    Heç kim cavab yazmayıb
  • JavaScript-də Promis

    promise asinxron then catch finally
    1
    1
    1 Yazı
    38 Baxış
    Heç kim cavab yazmayıb
  • Yüksək səviyyəli funksiyalar (Higher Order Functions)

    hof currying functions callback
    1
    1 Yazı
    23 Baxış
    Heç kim cavab yazmayıb
  • JavaScript-də scope-lar

    scope closure iife hoisting
    1
    1
    1 Yazı
    21 Baxış
    Heç kim cavab yazmayıb