Een vriend vroeg me of het in js mogelijk was een object ook private methodes te geven (heette iets anders maar doet er ff niet toe). Het idee is dan om de object specifieke functies ook andere hulp functies te laten hebben, die je zelf niet handmatig kan aanroepen (ala obj.functie()).
Met wat zoekwerk heb ik wel wat kunnen vinden over "private" variabelen en functies voor objecten, en "privileged" object functies die deze kunnen gebruiken ala:
Dat wist ik op zich wel. "melp" kan ik niet van buitenaf aanroepen, en ook die losse var is niet te achterhalen, maar als je dat op objectniveau zou uitbouwen zou je een object moeten definieren met alle object functies zoals "woei" hierboven, en dat is nou net de allertraagste (en imo sufste) manier om een object te definieren. Voor elke instantie van je object moet alles dan opnieuw opgebouwd worden.
Alleen zijn die private functies niet beschikbaar als je methodes aan je object hangt met prototyping.
Private of static variabelen zijn dan op zich wel te begruiken als je die truuk toepast. je zou dan met een set of get in de constructor je vars iig kunnen beschermen van rechtstreeks gepook van buitenaf, en dan de rest gewoon met prototyping doen, bijvoorbeeld:
Zodat je ook vanuit geprototypte functies die private variabelen op kan vragen middels een this.get(), Maar met functies krijg ik dit dus niet voor elkaar als ik het probeer te combineren met prototyping. Wat ik oa geprobeerd heb is een functie OM het prototypen van het object heen te hangen, als een soort Class, waarbinnen ik variabelen en functies definieer.
Dan heb ik alleen een ander probleem, namelijk dat die dingen die IN die functie maar BUITEN de prototypes staan gaan gelden voor de "class", en niet los per instantie van mijn object. zo kan je dus wel static variabelen maken, en ook private, maar wederom geen functies
en bovendien loopt de hele scoping denk ik grandioos in de soep als ik met object overerving aan de slag ga.
Een heel verhaal
en hopelijk iig een beetje duidelijk, maar mijn vraag is dus eigenlijk of iemand hier ueberhaupt ooit mee bezig is geweest, en een andere oplossing weet voor private en static dingen in js, anders dan privileged functies bouwen met je hele object als het ware in 1 grote functie. Op zich bestaan deze aspecten namelijk wel gewoon in js, maar je moet er erg veel moeite voor doen.
Met wat zoekwerk heb ik wel wat kunnen vinden over "private" variabelen en functies voor objecten, en "privileged" object functies die deze kunnen gebruiken ala:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| function myObject() { this.a = 'value'; // public var b = 'value'; // private var self = this; // helper function melp() { // private alert(self.a +' '+b); } // public privileged this.woei = function() { melp(); } this.woei(); // test } new myObject(); |
Dat wist ik op zich wel. "melp" kan ik niet van buitenaf aanroepen, en ook die losse var is niet te achterhalen, maar als je dat op objectniveau zou uitbouwen zou je een object moeten definieren met alle object functies zoals "woei" hierboven, en dat is nou net de allertraagste (en imo sufste) manier om een object te definieren. Voor elke instantie van je object moet alles dan opnieuw opgebouwd worden.
Alleen zijn die private functies niet beschikbaar als je methodes aan je object hangt met prototyping.
Private of static variabelen zijn dan op zich wel te begruiken als je die truuk toepast. je zou dan met een set of get in de constructor je vars iig kunnen beschermen van rechtstreeks gepook van buitenaf, en dan de rest gewoon met prototyping doen, bijvoorbeeld:
JavaScript:
1
2
3
4
5
6
7
8
9
10
| function myObject() { var privates = { member:'value', other:'something' } this.get = function(id) { return privates[id]; } } |
Zodat je ook vanuit geprototypte functies die private variabelen op kan vragen middels een this.get(), Maar met functies krijg ik dit dus niet voor elkaar als ik het probeer te combineren met prototyping. Wat ik oa geprobeerd heb is een functie OM het prototypen van het object heen te hangen, als een soort Class, waarbinnen ik variabelen en functies definieer.
Dan heb ik alleen een ander probleem, namelijk dat die dingen die IN die functie maar BUITEN de prototypes staan gaan gelden voor de "class", en niet los per instantie van mijn object. zo kan je dus wel static variabelen maken, en ook private, maar wederom geen functies
Een heel verhaal
Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin