Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130

    prototype e var private

    i metodi asseganti via prototype non possono accedere a metodi e attributi privati! cioe' se faccio:

    Codice PHP:
    function C(){
         var 
    locale "locale";
    }
    C.prototype.readLocal = function(){
         
    alert(locale)
    }
    var 
    = new C();
    o.readLocal() // locale is not defined 
    mi becco un errore. Allora ho pensato di risolvere cosi:

    Codice PHP:
    function C(){}
    C.prototype.readLocal = (function(){
        var 
    locale "locale";
        return function(){
            
    alert(locale)
        }    
    })();

    var 
    = new C;
    o.readLocal(); 
    ho l'assegnazione in core del metodo (a tutti gli oggetti istanziati con C) e allo stesso tempo ho accesso a varibili private. Chiaramente, non essendo queste variabili private create a instatiation time, non possono essere "personalizzate per ogni istanza" pero' ho comunque il vantaggio di prototype.

    sounds good?

  2. #2
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    nessuno sembra rispondere ... pensavo di avere scritto qualche cosa di almeno minimamente interessante. confidavo almeno in qualche commento (anche caustico) da parte dei 2-3 JS guru che si aggirano in questo forum! ;-(

    ma ndo state?

    ciao

  3. #3
    Non essendo un guru rischio di sparare una ca**ata enorme, tuttavia:
    Non è la stessa cosa mi pare.

    Nel primo caso la variabile locale è privata dell'oggetto C(), mentre nel secondo caso è privata del metodo readLocal.

    Io me lo chiederei proprio, anzi, lo chiederei ad uno di quei 2 o 3 guru: è possibile definire via prototype un metodo privilegiato per una classe in javascript ?

  4. #4
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    chiaro ma ai fini pratici hai una varibile privata accedibile da un metodo attaccato via prototype

  5. #5
    Ah, beh...grazie (se mi permetti...).

    Ma ai fini pratici non hai definito via prototype un metodo che abbia accesso ad una variabile privata della classe C().

    Nel tuo primo esempio tu volevi fare l'alert di locale, privata della classe C, mentre nella soluzione fai l'alert della variabile locale al metodo che implementi

    Codice PHP:
    function C(){}

    var 
    = new C;
    var 
    = new C;

    a.readLocal = (function(){
        var 
    locale "pippo";
        return function(){
            
    alert(locale)
        }    
    })();

    C.prototype.readLocal = (function(){
        var 
    locale "locale";
        return function(){
            
    alert(locale)
        }    
    })();


    a.readLocal();
    o.readLocal(); 
    Tra l'altro con questo esempio introduco un aspetto che non mi aspettavo, ma solo per la mia ignoranza: credevo che implementando un metodo via prototype avrei "sovrascritto" tutti i metodi con lo stesso nome delle istanze di un oggetto.

  6. #6
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    Originariamente inviato da Bazzilla
    Tra l'altro con questo esempio introduco un aspetto che non mi aspettavo, ma solo per la mia ignoranza: credevo che implementando un metodo via prototype avrei "sovrascritto" tutti i metodi con lo stesso nome delle istanze di un oggetto.
    no! prototype e' asimmetrico. se scrivi su un oggetto O la prop X e poi la setti anche via prototype sulla classe che ha istanziato O, O continua ad avere la sua prorieta' "locale"

  7. #7
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    ops mi e' scappatp il return per sbaglio! fra un po' posto quello che avevo in mente prima di premere ruturn senza accorgermene ;-)

  8. #8
    Originariamente inviato da nourdine
    no! prototype e' asimmetrico. se scrivi su un oggetto O la prop X e poi la setti anche via prototype sulla classe che ha istanziato O, O continua ad avere la sua prorieta' "locale"
    Grazie per la info, non lo sapevo.
    Come ho già detto in precedenza, ho ancora molte lacune.

  9. #9
    A parte il tempo di esecuzione delle istruzioni all'interno del metodo readLocal, quali sono le differenze tra queste due implementazioni ?

    Codice PHP:
    function C(){}
    C.prototype.readLocal = (function(){
        var 
    locale "locale";
        return function(){
            
    alert(locale)
        }    
    })();

    var 
    = new C;
    o.readLocal(); 
    Codice PHP:
    function C(){}
    C.prototype.readLocal = function(){
        var 
    locale "locale";
        return 
    alert(locale)
    };

    var 
    = new C;
    o.readLocal(); 

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 © 2025 vBulletin Solutions, Inc. All rights reserved.