Avatar billede wedia Nybegynder
31. januar 2010 - 13:27 Der er 8 kommentarer og
1 løsning

Igang med prototyping

Hej Eksperter,

Jeg sidder og vil gerne i gang med prototyping. Så er der nogle der kender til nogle gode tutorials. En anden ting jeg jeg har prøvet med at få dette til at virke men det fejler er der nogle der kan fortælle mig hvor problemet er. Fejlen jeg får er at "ProtoTest is not defined".. 

Her er koden :

(function(win) {
         
        win.ProtoTest = {
       
             
            Init : function(){
                alert('ok');
                }         
         
       
        };
});

ProtoTest.Init();
Avatar billede wedia Nybegynder
31. januar 2010 - 14:56 #1
jeg har fundet problemet med koden jeg havde glemt at kande hovedet funktionen on window load:

(function(win) {
       
        win.ProtoTest = {
     
           
            Init : function(){
                alert('ok');
                }       
       
     
        };
})(window);

ProtoTest.Init();
Avatar billede wedia Nybegynder
31. januar 2010 - 15:08 #2
Men jeg har et andet spørgsmål jeg har kikket på tinyMCE og i deres Init funktions kald har de disse eks:

tinyMCE.init({
       
        mode : "textareas",
        theme : "advanced"
});

hvad er ' mode : "textareas" ' er det en funktion eller variable og hvordan bliver den angivet i init funktionen og brugt?
Avatar billede tjens Nybegynder
31. januar 2010 - 15:41 #3
Begge dine spørgsmål omhandler JSON objekter, og ikke prototype.

Ja du manglede variabel win, men kunne have undværet den, da window er default:
function() {
        ProtoTest = {
            Init : function(){
                alert('P ok');
                }         
        };
})();

Men herover opretter vi bare en JSON singleton variabel.
Det kan også gøres sådan her:
        JSONTest = {
            objName: "MyJsonName",
            Init : function(){
                alert('from Init: ' + this.objName);
                }         
        };
uden at være pakket ind i function

Test af ovenstående:
    ProtoTest.Init();
    JSONTest.Init();
    alert(JSONTest.objName);


Og det leder hen til dit spørgsmål i #3:
{ navn: værdi, navn: værdi } er et JSON objekt.

D.v.s. at dit kald af tinyMCE.init medsender et objekt som indeholder 2 variable med navnene mode og theme , som er forudfyldt med de 2 strings "textareas" og "advanced".
Avatar billede wedia Nybegynder
31. januar 2010 - 16:10 #4
Tak for svaret *S*, jeg har dog lige et par spørgsmål.
1. hvad er forskellen på json og prototying?
2. er mode : "textareas" identisk med objName: "MyJsonName" og angivet uden for Init funktionen eller er mode inde i Init funktionen?
Avatar billede tjens Nybegynder
31. januar 2010 - 16:30 #5
1. Jeg har ingen erfaring med prototyping, men der er nok ingen ligheder mellem JSON (JavaScript Object Notation) og prototype:

JSON objekter er af typen "singleton" og kan dermed ikke instantieres med new.

Jeg gætter på at prototype bl.a. kan bruges til at beskrive objekter , inden de instantieres med new.

2. Ja, mode og objName er samme type object members:
Variabelnavne der er initieret med en String værdi.
Avatar billede wedia Nybegynder
31. januar 2010 - 16:39 #6
jeg kan godt få dette her til at virke :

(function(win) {
     
        win.ProtoTest = {
         
            mode : "test",
            Init : function(){
                alert(this.mode);
                }     
     
   
        };
})(window);

ProtoTest.Init();

men dette kan jeg ikke få til at virke

(function(win) {
     
        win.ProtoTest = {
   
         
            Init : function(){

                mode : "demo",
                alert(mode);
                }     
     
   
        };
})(window);

ProtoTest.Init({mode : "test");
jeg får hverken "test" eller "demo" ud ?
Avatar billede tjens Nybegynder
31. januar 2010 - 17:09 #7
Demo af JSON objekt som indeholder både funktion og nyt JSON objekt:
    JSONTest = {
        objName: "MyJsonName",
        configuration: {
            mode: null,
            theme: null
        },
        Init : function( conf ){
            this.configuration.mode = conf.mode;
            this.configuration.theme = conf.theme;
            alert('Init: Configuration OK' );
        },
        getConfAsString: function () {
            return     "objName: " + this.objName +
                    "\nmode: " + this.configuration.mode +
                    "\ntheme: " + this.configuration.theme;
        }
    };

    JSONTest.Init( { mode : "textareas",  theme : "advanced"} );

    alert(JSONTest.getConfAsString());

PS: Drop linierne
(function(win) {
og
})(window);
De har ingen funktion i dette tilfælde.
Avatar billede wedia Nybegynder
31. januar 2010 - 17:37 #8
Takker !!
Avatar billede Slettet bruger
31. januar 2010 - 22:47 #9
Prototyping er vidreudbyggelse af klasser i Javascript.
Et eksempel kunne være at tilføje en funktion i Date-klassen der udregner uge-nr ud fra den angivne dato, som ville kunne bruges sådan her:
alert(new Date().getWeekNr()).

Funktionen getWeekNr() er i dette tilfælde vores hjemmelavede funktion som vi har tilføjet til den allerede eksisterende Date-klasse.
For at udbygge Date-klassen med vores egen funktion kan følgende syntax bruges:
Date.prototype.getWeekNr = function() {
  return 0;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester