Denne demo viser dig hvordan man opretter følgende :
Opret en Anonymous Funktion i javascript
Opret en singleton i javascript
Opret en Request objekt i javascript
Denne demo og sample viser dig, hvor nemt du kan oprette en singleton javascript function.
Antag, at du ønsker at dumpe request parameterne fra en form post eller form get request.
Meningen med et Singleton pattern som beskrevet i Design Patterns er:
"Der kan kun være en instance, og der skal være en global single point reference til denne instance".
Singleton pattern er en af de mest brugte design pattern i Java.
Af en eller anden mystisk grund, så er der ikke særlig mange udviklere, der benytter singleton pattern når de skriver kode i javascript,
og selv om dette egentlig er forholdvist nemt.
Den nemmeste løsning er at lave en anonymous constructor.
En anonmyous constructor kaldes sådan, fordi den ikke har nogen constructor. Se eksempel.
Design Patterns i JavaScript:
Selvom JavaScript ikke implementerer det rigtige Singleton pattern, så lugter det lidt derhen af
fordi JavaScript IKKE et object-orienteret sprog,
Men det er dog muligt at simulere Singleton pattern ved at benytte en anonymous
function til at instanciere et nyt object som gemmer en reference i en global variable.
Indholdfortegnelse
Singleton Pattern i JavaScript
Anonymous Function er nøglen
Eksempler af Anonymous Functions
I computer science, er singleton design pattern designed til at begrænse
instantiation af en class til en (eller få) objekter.
Dette er meget benyttet hvor præcist et object er nødvendigt til at koordinere forskellige interactions i systemet.
JavaScript programmer er normalt simple nok til at kunne håndtere den ønskede funtionalitet, uden at benytte Singleton pattern.
Men best practice viser at dette kan : clarify code.
Hvis et program kun kræver en instance af et object, hvorfor så ikke benytte en singleton?
Hvis man benytter et object oriented indgangs vinkel for javascript koden, så kan efterfølgende metoder være nemmere at benytte.
Nøglen til dette er at benytte en anonymous functions
for at oprette et object som kun er begrænset til en instance i programmet.
Singleton pattern kan simuleres i JavaScript ved:
At benytte en anonymous constructor for at oprette et nyt function object
og gemme referencen til dette nye objekt i en global javascript variable.
For eksempel:
var Request = new function() {
// gør et eller andet
}
Den Anonymous Function er nøglen til løsningen, da en Anonymous Function
kun kan kaldes en eneste gang.
Denne "kald kun 1 gang" er faktisk hvad vi ønsker.
Hvorfor kunne vi ikke have benyttet en : Named Function?
Normalt har en function et navn i erklæringen.
For eksempel, i denne function, er navnet "SingleObject" og kommer efter nøgleordet
function og før function call operator ().
// Dette er IKKE en anonymous function,
// fordi den har et navn, SingleObject
function SingleObject() {
// todo
}
Fordi function SingleObject har et navn, så kan det erklæres flere gange
med det samme navn. Her er et eksempel:
// Først erklæring af SingleObject
function SingleObject() {
// do something useful
}
// Nu kan du benytte SingleObject flere gange for at oprette flere instancer af det samme objekt
// hvor referencen for hver enkelt object bliver gemt i forskellige variable
var firstObject = SingleObject();
var secondObject = SingleObject();
Ovenover, kan vi se at SingleObject blev benyttet til at oprette 2 objekter: firstObject
and secondObject.
Selv om de egentlig er forskellige instancer, så er det faktisk det samme objekt,
som benyttes, nemlig SingleObject.
Hele ideen med et Singleton pattern er at have flere instancer af det samme objekt.
Og den eneste vej til at undgå at oprette mere end to objekter, er at designe koden
således at SingleObject kun kan kaldes en enste gang, og til dette er en anonymous function fremragende at benyte.
Anonymous Functions
Fordi en anonymous function ikke har noget navn, så skal man benytte new keyword
til at oprette en instance af dette og for at kunne benytte denne instance senere,
så skal man gemme en reference til denne instance i en global variable, dette gøres med en assignment operator =
// Benyt new keyword og gem en reference i en global variable
var Request = new function() {
this.getParameter = function(key) {
return "My parameter:"+key;
}
}
// Og nu kan du benytte objektet, således
var value = Request.getParameter('Say');
Det object der blev oprette med en anonymous function blev gemt i en global variable Request.
Denne variable indeholder nu en reference til vores singleton object.
Nu kan vi efterfølgende kalde den netode der blev erklæret
ved at kalde med dot operator og function call
operator () som: Request.getParameter(key).
Bemærk at der er blevet benyttet to anonymous funktioner.
En til at oprette Request objektet og også i selve Request erklæringen til at oprette getParameter() methoden.
Denne metode svarer til en public static final String getParameter() {...} i java
Selv om det ikke var et krav til at benytte en anonymous function til at oprette getParameter()
methoden, så er det ret nemt at gøre på denne måde, fordi al koden passer ind i en linie.
Dette er sample kode som benyttes til at køre demo
<?php /** * This file is the local content file * It may be auto generated from the database or * manually edited * * @package js * @see hidden.php * @copyright (c) http://Finn-Rasmussen.com * @license http://Finn-Rasmussen.com/license/ myPHP License conditions * @author http://Finn-Rasmussen.com * @version 1.11 * @since 27-nov-2009 */
require_once('../content.php');
/** * Insert your html between the HTML_CONTENT markers */ if (empty($html)) { $html = ''; } $html =<<<HTML_CONTENT HTML_CONTENT;
De følgende demo samples viser dig hvordan man opretter en singleton i javascript og hvordan man kan kode en dato formatter og formatere et beløb med det locale der er gældende for dit område