Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di niubbo
    Registrato dal
    Jul 2004
    Messaggi
    692

    Strana sintassi: dichiarare una funzione come parametro di un oggetto, cerco aiuto...

    Sono un neofita col javascript e spesso la sua sintassi mi è aliena, sto utilizzando le API delle Google Maps e nell'utilizzare l'istanza d un oggetto sono incappato inquesta cosa:


    var map = new GMap2(document.getElementById("map"));
    var geocoder = new GClientGeocoder();

    function showAddress(address) {
    geocoder.getLatLng(
    address,
    function(point) {
    if (!point) {
    alert(address + " not found");
    } else {
    map.setCenter(point, 13);
    var marker = new GMarker(point);
    map.addOverlay(marker);
    marker.openInfoWindowHtml(address);
    }
    }
    );
    }
    Ciò ke mi rende perplesso è quel "function(point)" come parametro(!), nn capisco da dove prenda "point" e il fatto ke esegua una funzione dikiarata dove d solito si passa un parametro mi spaventa!!!

    Qualcuno sa spiegarmi questa cosa?

    Grazie
    Non si può niubbare per sempre...

    P.S. Ma perché i CSS non fanno quello che gli dico di fare.... aaaAAAAAAARGHHHHH!!!!!

  2. #2
    si chiamano funzioni di callback (se non sbaglio) e servono a fare qualcosa quando viene finita l'esecuzione della funzione che la richiama come parametro. Unica cosa anch'io non so da dove esce point!!!
    Qualcuno potrebbe fare lo stesso esempio facendo una chiamata ad una funzione definita con nome? così da capire meglio...
    GRAZIE
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  3. #3
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    In javascript le funzioni sono degli oggetti, oppure gli oggetti sono come funzioni.. non l'ho mai capito neppure io...
    Fatto sta che una funzione può ricevere come parametro un'altra funzione, nello specifico:

    codice:
    geocoder.getLatLng(address, callback);
    dove callback è una funzione con un parametro.

    Tornando al caso specifico, il parametro della funzione di callback viene chiamato point, ma la cosa è del tutto indifferente e qualunque nome sarebbe andato bene.

    per chiarire le cose, l'esempio sopra può essere riscritto così (beh.. almeno credo.. resto sempre sconcertato anch'io da queste cose... ):

    codice:
    var map = new GMap2(document.getElementById("map"));
    var geocoder = new GClientGeocoder();
    
    function showAddress(address) {
    	geocoder.getLatLng( address, miaFunzione );
    }
    con:

    codice:
    function miaFunzione (point)
    {
    	if (!point) {
    		alert(address + " not found");
    	} else {
    		map.setCenter(point, 13);
    		var marker = new GMarker(point);
    		map.addOverlay(marker);
    		marker.openInfoWindowHtml(address);
    	}
    }
    Quindi tu chiami la funzione getLatLng dell'oggetto geocoder. getLatLng sa che il secondo parametro è una funzione (la funzione di callback) e la esegue fornendole come parametro un valore. Per convenzione il parametro si chiama point, ma il nome può essere cambiato, l'importante è che all'interno della funzione di callback il nome resti quello.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  4. #4
    Grazie della spiegazione!
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

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.