[JS] Scope: best practice

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Mei
  • Registratie: Juni 2005
  • Laatst online: 17-10-2024
JavaScript:
1
setTimeout(function(){this._applyTransform(oParams, i)}, 10);


This gaat niet werken op deze manier. Nou kan ik die anonymous function eruit halen en neerzetten als named function en die met call() aanroepen, maar dan moet die named function weer buiten het object waar hij nu in zit en dat is wat ik juist probeer te vermijden. Waar ik nu mee bezig ben zijn namelijk twee methods van een class. De named function erbuiten werkt wel, maar mooi is anders.

Ik heb al van alles geprobeerd te goochelen met call(), maar ik ben er niet uigekomen. Iemand een tip?

Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
Een bind() functie gebruiken zoals prototype enzo dat doen?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • 0 Henk 'm!

Verwijderd

JavaScript:
1
2
var self = this;
setTimeout(function(){self._applyTransform(oParams, i)}, 10);

Edit: Aan de underscore te zien is applyTransform bedoeld als een private method. Het is echter gewoon een public method. Je kunt ook echte private methods maken door een functie te nesten in de constructor.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function MyObject() {
  function applyTransform() {
    // do stuff
  }

  this.publicMethod = function() {
    // ...
    setTimeout(function(){applyTransform(oParams, i)}, 10);
  }
}

var o = new MyObject();
o.publicMethod(); // --> OK
o.applyTransform(); // --> Error: applyTransform is geen method van o

[ Voor 73% gewijzigd door Verwijderd op 06-04-2008 01:29 ]


Acties:
  • 0 Henk 'm!

  • Mei
  • Registratie: Juni 2005
  • Laatst online: 17-10-2024
Als je een functie in de constructor zet, wordt dan niet voor elke instance een nieuwe method aangemaakt? Dat die functie dus per instance uniek is en niet naar een algemene method van dat soort object verwijst, wat je dus wel krijgt als met prototyping.

In ieder geval bedankt voor de tips, ik ga morgen even proberen :)

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Je kunt ook een bepaalde conventie adopteren en dat dan consequent dit toepassen. Bijvoorbeeld door private methoden met 1 of 2 underscores te beginnen.

Noushka's Magnificent Dream | Unity