Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    Oggetti "ex nihilo" e prototipizzazione.

    Ragazzi ho un problema!
    Costruendo un oggetto con il metodo letterale (ex nihilo) devo poi poterlo estendere.
    Esempio: creo l'oggetto zyppo!
    codice:
    var zyppo = {uno:1, due:2}
    poi se ho bisogno di aggiungere un altro metodo all'oggetto zyppo che faccio?
    Normalmente creo un altro oggetto per esempio:
    codice:
    var ronson = {tre: 3}
    che poi richiamo come prototipo
    codice:
    ronson.__proto__ = zyppo;
    ronson.uno; // Metodo ereditato da zyppo
    ronson.tre; // Metodo proprio di ronson
    ma oops (programmazione orientata agli oggetti stupida ) __proto__ mi dice Mozilla Developer che è deprecato!
    Ma allora che faccio uso prototype? Per esempio così?
    codice:
    ronson.prototype = zyppo;
    Mi pare sia errato o sbaglio?

    Inoltre cosa ancora più importante, in questo modo per aggiungere un metodo ad un oggetto devo per forza creare un altro oggetto, ma a me interessava aggiungere il metodo tre direttamente a zyppo senza passare necessariamente per ronson. Si può fare?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Non ho capito bene cosa devi fare cmq io un oggetto js lo creo cosi:

    codice:
    function Pippo(){
    	obj = new Object();
    }
    
    Pippo.prototype.get = function(indice){
    	return obj[indice]
    }
    
    Pippo.prototype.set = function(indice, valore){
    	obj[indice] = valore;
    }
    
    var pippo = new Pippo();
    pippo.set(0,"ciao");
    alert(pippo.get(0));
    Ho creato un oggetto Pippo con i metodi set e get... è solo un esempio ma magari può esserti utile...

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Sì se creassi un oggetto non letterale come quello descritto da me.
    Devo fare un po' di prove ma ora non ho tempo, forse 'stasera.

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    mi sono fermato a

    poi se ho bisogno di aggiungere un altro metodo all'oggetto zyppo che faccio?
    se hai
    codice:
    var zyppo = {uno:1, due:2}
    ti basta fare
    codice:
    zyppo.altrometodo = function() { ... }
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    buona fortuna allora!!

  6. #6
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Originariamente inviato da fcaldera
    mi sono fermato a



    se hai
    codice:
    var zyppo = {uno:1, due:2}
    ti basta fare
    codice:
    zyppo.altrometodo = function() { ... }
    A volte le soluzioni migliori sembrano le più semplici, ma allora tutta la questione riguardo la prototipizzazione?
    Ex nihilo significa creato dal nulla ed è in effetti un oggetto strano che non va instanziato con new. Però leggendo qua e là mi pare di capire che l'uso di prototype determina l'aggiunta del nuovo metodo a tutto il ramo discendente dell'oggetto già creato, cioè come se il nuovo metodo fosse stato definito nell'oggetto origine e non aggiunto in seguito.
    cioè come hai scritto tu altrometodo è un oggetto sì definito in zyppo, ma discendente solo da se stesso, mentre se avessi usato la prototipizzazione è come se avessi sin dall'origine scritto
    codice:
    var zyppo = {uno:1, due:2, altrometodo = function() {}}
    o sbaglio?

  7. #7
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Ho fatta una prova al volo.
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
    <html 	xmlns="http://www.w3.org/1999/xhtml" 
    		xmlns:dc="http://purl.org/dc/terms/"
    		version="XHTML+RDFa 1.0" xml:lang="it" dir="ltr">
    <head>
    	<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    	<title>Javascript prove su ex nihilo e prototipizzazione</title>
    	
    	<script type="text/javascript" src="obj.js"></script>
    	<script type="text/javascript">
    		alert(zyppo.uno);
    		
    		//zyppo.prototype.tre = 3;
    		zyppo.tre = 3;
    		
    		alert(zyppo.tre);
    	</script>
    </head>
    <body>
    
    </body>
    </html>
    e poi il file javascript esterno (obj.js)
    codice:
    var zyppo = {
    	uno: 1,
    	due: 2
    }
    Se lascio commentata la stringa con la prototipizzazione funziona e firebug non mi da nessun errore, i due alert vanno che è una meraviglia dandomi in risposta prima 1 e poi 3
    Se tolgo la spunta il primo alert mi da 1 e poi lo script si ferma.
    Firebug mi da errore missing zyppo.prototype undefined e li si ferma, mi par di capire che non si può protipare un oggetto così, sempre che abbia un senso tutto ciò

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.