Visualizzazione dei risultati da 1 a 4 su 4

Discussione: delucidazione sul this

  1. #1

    delucidazione sul this

    Salve a tutti vorrei avere un chiarimento sul this per quanto riguarda le funzioni costruttore.
    Il succo di questo codice
    codice:
    let libro = new Libro(“Fondazione, 571);
    
    function Libro(titolo, pagine) {
    this.titolo = titolo;
    this.pagine = pagine;
    }
    
    
    sarebbe titolo: "Fondazione" , pagine :571" ?
    serve a questo il this? Ad assegnare a dei parametri della funzione le rispettive proprietà di un oggetto? Grazie in anticipo.

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,726
    Ciao, non esattamente; il this fa riferimento all'oggetto relativo al contesto in cui questa istruzione viene usata.

    Ad assegnare a dei parametri della funzione le rispettive proprietà di un oggetto?
    In questo particolare caso direi esattamente il contrario. I valori che stai passando attraversi i parametri della funzione costruttore, li vai ad assegnare alle proprietà di quell'oggetto libro; il this fa infatti riferimento a questo oggetto che è un'istanza della classe Libro.

    In questo modo puoi creare diversi oggetti, istanze di quella stessa classe, e passare diversi valori i quali, attraverso il this, saranno applicati opportunamente alle proprietà relative a ciascuna specifica istanza.

    codice:
    function Libro(titolo, pagine) {
        this.titolo = titolo;
        this.pagine = pagine;
    }
    
    let libro = new Libro("Fondazione", 571);
    let libro2 = new Libro("Pippo", 123);
    
    console.log(libro);  // output: Object { titolo: "Fondazione", pagine: 571 }
    console.log(libro2); // output: Object { titolo: "Pippo", pagine: 123 }
    Ultima modifica di KillerWorm; 13-05-2020 a 17:57
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  3. #3
    Forse non mi ero spiegato bene ma intendevo quello che hai detto tu; cioè
    codice:
    this.titolo = titolo
    fa riferimento in questo caso alla prima proprietà dell'oggetto Libro giusto? che è appunto l'oggetto a cui fa riferimento.
    La cosa che non ho capito però è perchè rendere
    codice:
    this.nome = nome
    A cosa serve farlo?
    Ultima modifica di gulliver.pro; 14-05-2020 a 10:05

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,726
    La classe Libro inizialmente è solo un involucro vuoto, non ha alcuna proprietà finché non viene definita.

    In quel caso la funzione costruttore fa esattamente questo, definire quelle due proprietà per l'istanza di quella classe, creata con l'operatore new.

    Il this, in questo caso, fa infatti riferimento all'istanza appena creata, cioè all'oggetto libro (non alla classe Libro). Sfruttando questo riferimento è possibile definire quelle proprietà (this.titolo e this.pagine) che ancora non esistevano; tali proprietà vengono quindi definite e inizializzate con i valori passati come parametri della funzione.

    Se fai un output di quelle proprietà prima di definirle e inizializzarle, ottieni infatti il valore undefined:

    codice:
    function Libro(titolo, pagine) {
        console.log(this.titolo);  // output: undefined
        console.log(this.pagine); // output: undefined
    
        this.titolo = titolo;
        this.pagine = pagine;
    }
    .
    Forse ti confonde il fatto che vengono usati gli stessi nomi sia per i parametri della funzione sia per le proprietà dell'oggetto, ma queste "variabili" sono definite in due differenti modi; i parametri della funzione sono definiti nell'ambito (scope) della funzione e sono accessibili solo a livello locale di quella funzione, mentre le proprietà dell'oggetto sono definite nel contesto (context) dell'oggetto a cui quel this fa riferimento.

    Usando differenti nomi il risultato non cambia ma forse potrebbe aiutarti a chiarire:
    codice:
    function Libro(parametro1, parametro2) {
        this.titolo = parametro1;
        this.pagine = parametro2;
    }
    
    let libro = new Libro("Fondazione", 571);
    
    console.log(libro);  // output: Object { titolo: "Fondazione", pagine: 571 }
    .
    La differenza tra scope (ambito di validità delle variabili) e context (contesto in cui le variabili sono definite a livello di oggetto) può essere difficile da comprendere anche per chi non è alle prime armi. Comprendere bene questi concetti, relativi alla OOP ma soprattutto per come funziona in JavaScript, può fare la differenza.

    Posso consigliarti qualche lettura marginale che magari può aiutarti a chiarire qualche dubbio:
    JavaScript: cosa sono lo “Scope” e il “Context”
    Understanding Scope and Context in JavaScript


    Fai sapere se qualcosa ti è più chiaro o se ti ho confuso maggiormente le idee
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.