Avatar billede cronck Nybegynder
23. juni 2011 - 10:34 Der er 5 kommentarer og
1 løsning

Prototype funktion ødelægger anden funktion

Jeg har fundet følg. funktion til at tælle hvor stort et associativt array er.

Array.prototype.size = function () {
  var l = this.length ? --this.length : -1;
  for (var k in this) {
    l++;
  }
  return l;
}

Jeg bruger på samme side Google Maps API v3.
Af en eller anden årsag, så bliver API'ets array.setMap(map) ugyldig når ovenstående eksisterer på min side.

Nogen der kender en eller anden forklaring på dette? :)
Avatar billede olsensweb.dk Ekspert
23. juni 2011 - 10:41 #1
uden at have set i gmap script, kunne det tænkes du anvender i eller k variablen der, variasblerne lever desværer også uden for functionerne, i JS
Avatar billede cronck Nybegynder
23. juni 2011 - 10:46 #2
Ahh... Vidste faktisk ikke at variablerne også kom ud af funktionerne, hvis man kan sige det sådan. Er jeg ikke lige vant til :)

Har prøvet at lave navnene på variablerne om, uden held.

Uncaught TypeError: Object function () {
  var lsss = this.length ? --this.length : -1;
  for (var ksss in this) {
    lsss++;
  }
  return lsss;
} has no method 'setMap'
Avatar billede cronck Nybegynder
23. juni 2011 - 11:09 #3
Det virker fint hvis jeg laver det som en alm. funktion:

function arrSize() {
  var l = this.length ? --this.length : -1;
  for (var k in this) {
    l++;
  }
  return l;
}

Synes dog det andet er en langt pænere måde at gøre det på, så jeg vil stadig meget gerne have et svar :)
Avatar billede intenz Novice
23. juni 2011 - 15:43 #4
#1. Variablerne 'lever' kun udenfor funktionerne, hvis de ikke er defineret med 'var' inde i funktionen.

Lever ikke videre udenfor testA funktionen:

var a = 1;
function testA() {
  var a = 2; // eget scope
}
function alertA() {
  alert(a); // alert '1';
}

testA();
alertA();


testB ændrer variablen 'b' i global scope, pga. den ikke har 'var'.

var b = 1;
function testB() {
  b = 2; // eget scope
}
function alertB() {
  alert(b); // alert '2';
}

testB();
alertB();


#0.
Du overskriver nok en eksisterende funktion fra gmaps api. Prøv at omdøb din metode til f.eks.
Array.prototype.aSize()
Avatar billede cronck Nybegynder
15. juli 2011 - 13:43 #5
Beklager det sene svar.
Endte med at jeg slet ikke benyttede mig at den prototype funktion. :)

Har prøvet at omdøbe den til ...aSize() men det giver nøjagtig samme fejl.

Fejl:
markersArray[i].setMap is not a function
markersArray[i].setMap(null);

Igen, virker det fint hvis jeg udkommenterer funktionen.
Avatar billede cronck Nybegynder
11. juli 2012 - 09:58 #6
Kan ikke huske helt præcis hvad der løste problemet. Endte vidst med at skrive en del kode om. :)

Lukker spm.
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

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