Bonjour � tous,
Je viens du C/C++ et essaye de comprendre l'�quivalent des classes par l'emploi de prototype et de classes imm�diates en particulier.
Je dois cr�er mes propres objets pour une application et cherche la meilleur fa�on de le faire. J'ai ici 2 template de 'classe' que j'ai extrait de classes de Three.js que j'utilise actuellement. Ils semblent structur�s diff�remment, hormis le fait que l'un int�gre la gestion des �v�nements.
Si quelqu'un avait un peu de temps pour faire le tour de ces deux template. Vous trouverez mes questions plus particuli�res en dessous de chaque bloc.
Q: Il y a l� 3 types de fonctions et je souhaiterais comprendre quel est leur usage typique et dans quel situation je devrais moi aussi cr�er ce type de fonction
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 ClassName = function ( param, domElement ) { var _this = this; this.param = param; this.domElement = ( domElement !== undefined ) ? domElement : document; // API this.apivar = 1.0; // internals var _internalVar = true; //dispatchEvents var changeEvent = { type: 'change' }; //methods this.firstMethod = function () { }; this.secondMethod = ( function() { var intern = true; return function secondMethod() { }; }() ); var immediateVar = ( function () { var intern = true; return function immediateVar( param ) { param = false; return param; }; }() ); // events function mouseup( event ) { if ( _this.enabled === false ) return; event.preventDefault(); event.stopPropagation(); document.removeEventListener( 'mousemove', mousemove ); document.removeEventListener( 'mouseup', mouseup ); _this.dispatchEvent( changeEvent ); } this.dispose = function() { this.domElement.removeEventListener( 'contextmenu', contextmenu, false ); document.removeEventListener( 'mousemove', mousemove, false ); window.removeEventListener( 'keydown', keydown, false ); }; this.domElement.addEventListener( 'contextmenu', contextmenu, false ); window.addEventListener( 'keydown', keydown, false ); }; ClassName.prototype = Object.create( ClassName.prototype ); ClassName.prototype.constructor = ClassName;
- firstMethod d�clar�e simplement
- secondMethod est une fonction imm�diate mais dont le retour est affect� au nom d'une fonction
- thirdMethod est une fonction imm�diate mais dont le retour est affect� � un nom de variable
Q: Quelle est la raison d'�tre de cette ligne exactement ? Est-ce l'�quivalent de Object.assign( ClassName.prototype,... du second template ci-apr�s ?
ClassName.prototype = Object.create( ClassName.prototype );
Q: Est-ce que thirdFunction n'est pas inclue dans le bloc Prototype par ce qu'elle n'a pas besoin d'�tre h�rit�e?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 ( function () { ClassName = function (){ }; Object.assign( ClassName.prototype, { firstMethod: function (param) { }, secondMethod: function (param) { } }); function thirdFunction (param) { return param; } function FourthFunction () { Object.assign ( FourthFunction.prototype, { fifthFunction: function () { } }); } }) ();
Q: Pourquoi fifthFunction est-elle imbriqu�e ainsi, quel en est l'usage ? Comment l'appelle t-on ?
Merci par avance pour le temps pass� � d�cortiquer ces deux squelettes !
Badoumba
Partager