javascript tome ix - Format (Représentation) interne des objets JavaScript

advertisement
J.B. Dadet DIASOLUKA Luyalu Nzoyifuanga
J AVA S C R I P T (Programmation Internet) V O L . I X
+243 - 851278216 - 899508675 - 995624714 - 902263541 - 813572818
La dernière révision de ce texte est disponible sur CD.
CHAPITRE 16 :
Format (Représentation) Interne des objets
en JavaScript, avec la commande
Object.getOwnPropertyDescriptors (object) :
La commande Object.getOwnPropertyDescriptors (object)
liste les attributs [propres] ou descripteurs d’un objet.
Quand nous créons un objet, les propriétés de cet objet sont
en fait, à l’instar du prototype, des objets ayant leurs propres
propriétés appelées ici ATTRIBUTS, ses attributs comportant
chacune à leur tour ses propres propriétés suivantes et les
mêmes pour tous les attributs : value (en fait la valeur de la
propriété), writable, enumerable, configurable.
Rappelons que le prototype est une propriété particulière
(pas comme les autres) qui renferme les propriétés disponibles pour l’objet, mais aussi partageables avec et héritables
par ses fils, alors que les propriétés ordinaires (non conte-
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
nues dans le prototype et définies directement dans le corps
de l’objet) ne sont pas héritables. Le prototype renferme
donc l’ensemble de propriétés intrinsèques communes à
l’objet en cours, et ses descendants.
Cependant, les propriétés propres du constructeur définies
lors de sa « définition » sont toutes héritables, mais ses variables locales ne le sont pas.
De même, si on redirige le prototype du constructeur vers un
autre objet (ou fonction), le prototype des instances de ce
constructeur créées sous l’ancien prototype continueront à
pointer le prototype du constructeur qui était en cours lors de
la construction/création de ces instances. Ces instances ne
reconnaîtront pas le nouveau prototype.
Tandis que les instances créées après redirection du prototype du constructeur pointeront ce nouveau prototype et ne
reconnaîtront pas l’ancien prototype.
On ne peut pas accéder aux propriétés propres d’un constructeur (dans le sens qu’elles n’appartiennent pas à son prototype) via le nom du constructeur
(nom_constructeur.property) quand ces propriétés ont été
définies dans le corps de définition du constructeur.
Format Interne des objets
- 2 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
Mais les propriétés propres d’un constructeur définies en
dehors de son corps de définition sont accessibles via le nom
de ce constructeur (nom_constructeur.property).
Une instance n’hérite jamais d'une variable locale de son
constructeur.
Une instance n’hérite pas d'une propriété non ajoutée au
constructeur via le prototype en cours. Ce genre de propriétés sont des propriétés propres (non partageable ni héritable) du constructeur.
Le prototype étant un objet à part entière, la création/redirection d’un nouveau prototype DOIT se faire avec
l’opérateur « new ». (voyez l’exemple à la fin de cet exposé
chapitre XIII p. 22).
Format Interne des objets
- 3 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
I.
JavaScript Tome-IX
Format de stockage interne d’une String :
Nous scannerons d’abord la représentation interne d’un objet
String (chaîne [de caractères]). Un objet String (chaîne [de
caractères]) est représenté internement sous forme d’une
Array (tableau monodimensionnelle) dont les indices vont de
zéro à n-1, n étant la taille (length ou nombre de caractères)
de la chaîne.
<script type="text/javascript"> "use strict";
// Avec “ var ”
var stgv = "La filaire qui rend aveugle !";
console.log(stgv);
// La filaire qui rend aveugle !
console.log(Object.getOwnPropertyDescriptors(stgv));
// Object { 0: {…}, 1: {…}, 2: {…}, 3: {…}, 4: {…},
5: {…}, 6: {…}, 7: {…}, 8: {…}, 9: {…}, … }
/*
0: {value: "L", writable: false, enumerable: true,
configurable: false}
1: {value: "a", writable: false, enumerable: true,
configurable: false}
2: {value: " ", writable: false, enumerable: true,
configurable: false}
3: {value: "f", writable: false, enumerable: true,
configurable: false}
4: {value: "i", writable: false, enumerable: true,
configurable: false}
5: {value: "l", writable: false, enumerable: true,
configurable: false}
6: {value: "a", writable: false, enumerable: true,
configurable: false}
7: {value: "i", writable: false, enumerable: true,
configurable: false}
8: {value: "r", writable: false, enumerable: true,
configurable: false}
Format Interne des objets
- 4 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
9: {value: "e", writable: false, enumerable: true,
configurable: false}
10: {value: " ", writable: false, enumerable: true,
configurable: false}
11: {value: "q", writable: false, enumerable: true,
configurable: false}
12: {value: "u", writable: false, enumerable: true,
configurable: false}
13: {value: "i", writable: false, enumerable: true,
configurable: false}
14: {value: " ", writable: false, enumerable: true,
configurable: false}
15: {value: "r", writable: false, enumerable: true,
configurable: false}
16: {value: "e", writable: false, enumerable: true,
configurable: false}
17: {value: "n", writable: false, enumerable: true,
configurable: false}
18: {value: "d", writable: false, enumerable: true,
configurable: false}
19: {value: " ", writable: false, enumerable: true,
configurable: false}
20: {value: "a", writable: false, enumerable: true,
configurable: false}
21: {value: "v", writable: false, enumerable: true,
configurable: false}
22: {value: "e", writable: false, enumerable: true,
configurable: false}
23: {value: "u", writable: false, enumerable: true,
configurable: false}
24: {value: "g", writable: false, enumerable: true,
configurable: false}
25: {value: "l", writable: false, enumerable: true,
configurable: false}
26: {value: "e", writable: false, enumerable: true,
configurable: false}
27: {value: " ", writable: false, enumerable: true,
configurable: false}
28: {value: "!", writable: false, enumerable: true,
configurable: false}
length: {value: 29, writable: false, enumerable:
false, configurable: false}
__proto__: Object
*/
Format Interne des objets
- 5 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
/////////////////////////////////////////////
// Avec “ let ”
let stgl = "La filaire qui rend aveugle !";
console.log(stgl);
// La filaire qui rend aveugle !
console.log(Object.getOwnPropertyDescriptors(stgl));
// Object { 0: {…}, 1: {…}, 2: {…}, 3: {…}, 4: {…},
5: {…}, 6: {…}, 7: {…}, 8: {…}, 9: {…}, … }
/*
0: {value: "L", writable: false, enumerable: true,
configurable: false}
1: {value: "a", writable: false, enumerable: true,
configurable: false}
2: {value: " ", writable: false, enumerable: true,
configurable: false}
3: {value: "f", writable: false, enumerable: true,
configurable: false}
4: {value: "i", writable: false, enumerable: true,
configurable: false}
5: {value: "l", writable: false, enumerable: true,
configurable: false}
6: {value: "a", writable: false, enumerable: true,
configurable: false}
7: {value: "i", writable: false, enumerable: true,
configurable: false}
8: {value: "r", writable: false, enumerable: true,
configurable: false}
9: {value: "e", writable: false, enumerable: true,
configurable: false}
10: {value: " ", writable: false, enumerable: true,
configurable: false}
11: {value: "q", writable: false, enumerable: true,
configurable: false}
12: {value: "u", writable: false, enumerable: true,
configurable: false}
13: {value: "i", writable: false, enumerable: true,
configurable: false}
14: {value: " ", writable: false, enumerable: true,
configurable: false}
Format Interne des objets
- 6 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
15: {value: "r", writable: false, enumerable: true,
configurable: false}
16: {value: "e", writable: false, enumerable: true,
configurable: false}
17: {value: "n", writable: false, enumerable: true,
configurable: false}
18: {value: "d", writable: false, enumerable: true,
configurable: false}
19: {value: " ", writable: false, enumerable: true,
configurable: false}
20: {value: "a", writable: false, enumerable: true,
configurable: false}
21: {value: "v", writable: false, enumerable: true,
configurable: false}
22: {value: "e", writable: false, enumerable: true,
configurable: false}
23: {value: "u", writable: false, enumerable: true,
configurable: false}
24: {value: "g", writable: false, enumerable: true,
configurable: false}
25: {value: "l", writable: false, enumerable: true,
configurable: false}
26: {value: "e", writable: false, enumerable: true,
configurable: false}
27: {value: " ", writable: false, enumerable: true,
configurable: false}
28: {value: "!", writable: false, enumerable: true,
configurable: false}
length: {value: 29, writable: false, enumerable:
false, configurable: false}
__proto__: Object
*/
/////////////////////////////////////////////
// Avec “ const ”
const stgc = "La filaire qui rend aveugle !";
console.log(stgc);
// La filaire qui rend aveugle !
console.log(Object.getOwnPropertyDescriptors(stgc));
Format Interne des objets
- 7 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
// Object { 0: {…}, 1: {…}, 2: {…}, 3: {…}, 4: {…},
5: {…}, 6: {…}, 7: {…}, 8: {…}, 9: {…}, … }
/*
0: {value: "L", writable: false, enumerable: true,
configurable: false}
1: {value: "a", writable: false, enumerable: true,
configurable: false}
2: {value: " ", writable: false, enumerable: true,
configurable: false}
3: {value: "f", writable: false, enumerable: true,
configurable: false}
4: {value: "i", writable: false, enumerable: true,
configurable: false}
5: {value: "l", writable: false, enumerable: true,
configurable: false}
6: {value: "a", writable: false, enumerable: true,
configurable: false}
7: {value: "i", writable: false, enumerable: true,
configurable: false}
8: {value: "r", writable: false, enumerable: true,
configurable: false}
9: {value: "e", writable: false, enumerable: true,
configurable: false}
10: {value: " ", writable: false, enumerable: true,
configurable: false}
11: {value: "q", writable: false, enumerable: true,
configurable: false}
12: {value: "u", writable: false, enumerable: true,
configurable: false}
13: {value: "i", writable: false, enumerable: true,
configurable: false}
14: {value: " ", writable: false, enumerable: true,
configurable: false}
15: {value: "r", writable: false, enumerable: true,
configurable: false}
16: {value: "e", writable: false, enumerable: true,
configurable: false}
17: {value: "n", writable: false, enumerable: true,
configurable: false}
18: {value: "d", writable: false, enumerable: true,
configurable: false}
19: {value: " ", writable: false, enumerable: true,
configurable: false}
20: {value: "a", writable: false, enumerable: true,
configurable: false}
Format Interne des objets
- 8 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
21: {value: "v", writable: false, enumerable: true,
configurable: false}
22: {value: "e", writable: false, enumerable: true,
configurable: false}
23: {value: "u", writable: false, enumerable: true,
configurable: false}
24: {value: "g", writable: false, enumerable: true,
configurable: false}
25: {value: "l", writable: false, enumerable: true,
configurable: false}
26: {value: "e", writable: false, enumerable: true,
configurable: false}
27: {value: " ", writable: false, enumerable: true,
configurable: false}
28: {value: "!", writable: false, enumerable: true,
configurable: false}
length: {value: 29, writable: false, enumerable:
false, configurable: false}
__proto__: Object
*/
</script>
II.
Format de stockage interne d’un littéral d’objet :
Un littéral d’objet est un moyen rapide de définir un nouvel
objet.
<script type="text/javascript"> "use strict";
let obj = {article:"La", susbtantif:"filaire",
conjonctif:"qui", verbe:"rend",
cod:"aveugle", ponctuation:"!"};
console.log(obj);
// Object { article: "La", susbtantif:
conjonctif: "qui", verbe: "rend", cod:
ponctuation: "!" }
Format Interne des objets
- 9 / 29 -
"filaire",
"aveugle",
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
/*
article: "La"
cod: "aveugle"
conjonctif: "qui"
ponctuation: "!"
susbtantif: "filaire"
verbe: "rend"
__proto__: Object
*/
console.log(Object.getOwnPropertyDescriptors(obj));
// Object { article: {…}, susbtantif: {…}, conjonctif: {…}, verbe: {…}, cod: {…}, ponctuation: {…} }
/*
// AVEC FIREFOX :
article: Object { value: "La", writable: true, enumerable: true, … }
cod: Object { value: "aveugle", writable: true,
enumerable: true, … }
conjonctif: Object { value: "qui", writable: true,
enumerable: true, … }
ponctuation: Object { value: "!", writable: true,
enumerable: true, … }
susbtantif: Object { value: "filaire", writable:
true, enumerable: true, … }
verbe: Object { value: "rend", writable: true, enumerable: true, … }
__proto__: Object { … }
// AVEC YANDEX :
article: {value: "La", writable: true, enumerable:
true, configurable: true}
cod: {value: "aveugle", writable: true, enumerable:
true, configurable: true}
conjonctif: {value: "qui", writable: true, enumerable: true, configurable: true}
ponctuation: {value: "!", writable: true, enumerable: true, configurable: true}
Format Interne des objets
- 10 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
susbtantif: {value: "filaire", writable: true, enumerable: true, configurable: true}
verbe: {value: "rend", writable: true, enumerable:
true, configurable: true}
__proto__: Object
*/
</script>
III.
Format de stockage interne d’une Array:
Une Array est une collection indexée.
<script type="text/javascript"> "use strict";
var arr = ["La", "filaire", "qui", "rend",
"aveugle", "!"];
console.log(arr);
//
Array
[
"La",
"aveugle", "!" ]
"filaire",
"qui",
"rend",
/*
(6) ["La", "filaire", "qui", "rend", "aveugle", "!"]
0: "La"
1: "filaire"
2: "qui"
3: "rend"
4: "aveugle"
5: "!"
length: 6
__proto__: Array(0)
*/
console.log(Object.getOwnPropertyDescriptors(arr));
/*
Format Interne des objets
- 11 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
Object { 0: {…}, 1: {…}, 2: {…}, 3: {…}, 4: {…}, 5:
{…}, length: {…} }
0: {value: "La", writable: true, enumerable:
true, configurable: true}
1: {value: "filaire", writable: true, enumerable: true, configurable: true}
2: {value: "qui", writable: true, enumerable:
true, configurable: true}
3: {value: "rend", writable: true, enumerable:
true, configurable: true}
4: {value: "aveugle", writable: true, enumerable: true, configurable: true}
5: {value: "!", writable: true, enumerable:
true, configurable: true}
length: {value: 6, writable: true, enumerable:
false, configurable: false}
__proto__: Object
*/
</script>
IV.
Format de stockage interne d’un objet Date via
l’opérateur « new » :
Un objet Date sert à afficher et à manipuler les dates.
<script type="text/javascript"> "use strict";
var dat = new Date("Friday, 1953 8 11");
console.log(dat.toUTCString());
// Mon, 10 Aug 1953 22:00:00 GMT
console.log(Object.getOwnPropertyDescriptors(dat));
//
Object {
}
/*
{}
__proto__: Object { … }
Format Interne des objets
- 12 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
*/
</script>
V.
Format de stockage interne d’un objet Date sans
l’opérateur « new » : ni plus ni moins une String.
<script type="text/javascript"> "use strict";
var dat = Date("Friday, 1953 8 11");
console.log(dat.toLocaleString());
// Thu May 10 2018 08:43:29 GMT+0100 (Paris, Madrid)
console.log(Object.getOwnPropertyDescriptors(dat));
// Object {0: {…}, 1: {…}, 2: {…}, 3:
5: {…}, 6: {…}, 7: {…}, 8: {…}, 9: {…},
{…}, 12: {…}, 13: {…}, 14: {…}, 15: {…},
{…}, 18: {…}, 19: {…}, 20: {…}, 21: {…},
{…}, 24: {…}, 25: {…}, 26: {…}, 27: {…},
{…}, 30: {…}, 31: {…}, 32: {…}, 33: {…},
{…}, 36: {…}, 37: {…}, 38: {…}, 39: {…},
{…}, 42: {…}, 43: {…}, 44: {…}, 45: {…},
{…}, 48: {…}, length: {…}}
/*
0: {value: "T", writable:
configurable: false}
1: {value: "h", writable:
configurable: false}
2: {value: "u", writable:
configurable: false}
3: {value: " ", writable:
configurable: false}
4: {value: "M", writable:
configurable: false}
Format Interne des objets
{…}, 4: {…},
10: {…}, 11:
16: {…}, 17:
22: {…}, 23:
28: {…}, 29:
34: {…}, 35:
40: {…}, 41:
46: {…}, 47:
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
- 13 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
5: {value: "a", writable:
configurable: false}
6: {value: "y", writable:
configurable: false}
7: {value: " ", writable:
configurable: false}
8: {value: "1", writable:
configurable: false}
9: {value: "0", writable:
configurable: false}
10: {value: " ", writable:
configurable: false}
11: {value: "2", writable:
configurable: false}
12: {value: "0", writable:
configurable: false}
13: {value: "1", writable:
configurable: false}
14: {value: "8", writable:
configurable: false}
15: {value: " ", writable:
configurable: false}
16: {value: "0", writable:
configurable: false}
17: {value: "8", writable:
configurable: false}
18: {value: ":", writable:
configurable: false}
19: {value: "4", writable:
configurable: false}
20: {value: "3", writable:
configurable: false}
21: {value: ":", writable:
configurable: false}
22: {value: "1", writable:
configurable: false}
23: {value: "8", writable:
configurable: false}
24: {value: " ", writable:
configurable: false}
25: {value: "G", writable:
configurable: false}
26: {value: "M", writable:
configurable: false}
27: {value: "T", writable:
configurable: false}
Format Interne des objets
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
false, enumerable: true,
- 14 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
28: {value: "+", writable: false, enumerable: true,
configurable: false}
29: {value: "0", writable: false, enumerable: true,
configurable: false}
30: {value: "1", writable: false, enumerable: true,
configurable: false}
31: {value: "0", writable: false, enumerable: true,
configurable: false}
32: {value: "0", writable: false, enumerable: true,
configurable: false}
33: {value: " ", writable: false, enumerable: true,
configurable: false}
34: {value: "(", writable: false, enumerable: true,
configurable: false}
35: {value: "P", writable: false, enumerable: true,
configurable: false}
36: {value: "a", writable: false, enumerable: true,
configurable: false}
37: {value: "r", writable: false, enumerable: true,
configurable: false}
38: {value: "i", writable: false, enumerable: true,
configurable: false}
39: {value: "s", writable: false, enumerable: true,
configurable: false}
40: {value: ",", writable: false, enumerable: true,
configurable: false}
41: {value: " ", writable: false, enumerable: true,
configurable: false}
42: {value: "M", writable: false, enumerable: true,
configurable: false}
43: {value: "a", writable: false, enumerable: true,
configurable: false}
44: {value: "d", writable: false, enumerable: true,
configurable: false}
45: {value: "r", writable: false, enumerable: true,
configurable: false}
46: {value: "i", writable: false, enumerable: true,
configurable: false}
47: {value: "d", writable: false, enumerable: true,
configurable: false}
48: {value: ")", writable: false, enumerable: true,
configurable: false}
length: {value: 49, writable: false, enumerable:
false, configurable: false}
__proto__: Object
constructor: ƒ Object()
Format Interne des objets
- 15 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
hasOwnProperty: ƒ hasOwnProperty()
isPrototypeOf: ƒ isPrototypeOf()
propertyIsEnumerable: ƒ propertyIsEnumerable()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
valueOf: ƒ valueOf()
__defineGetter__: ƒ __defineGetter__()
__defineSetter__: ƒ __defineSetter__()
__lookupGetter__: ƒ __lookupGetter__()
__lookupSetter__: ƒ __lookupSetter__()
get __proto__: ƒ __proto__()
set __proto__: ƒ __proto__()
*/
</script>
VI.
Format de stockage interne d’une « variable numérique » :
<script type="text/javascript"> "use strict";
var numv = 2018;
console.log(numv);
// 2018
console.log(Object.getOwnPropertyDescriptors(numv));
/*
Object { }
{}
__proto__: Object { … }
*/
</script>
VII.
Format de stockage interne d’un « objet Number »
avec l’opérateur « new » :
Format Interne des objets
- 16 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
<script type="text/javascript"> "use strict";
var numO = new Number( 2018 );
console.log(numO);
// Number { 2018 }
console.log(Object.getOwnPropertyDescriptors(numO));
/*
Number {2018}
__proto__: Number { 0 }
[[PrimitiveValue]]: 2018
*/
</script>
VIII.
Format de stockage interne d’un « objet Number »
sans l’opérateur « new » :
<script type="text/javascript"> "use strict";
var numO = Number( 2018 );
console.log(numO);
// 2018
console.log(Object.getOwnPropertyDescriptors(numO));
/*
{}
__proto__: Object { … }
*/
</script>
Format Interne des objets
- 17 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
IX.
JavaScript Tome-IX
Format de stockage interne d’une variable « Boolean » :
<script type="text/javascript"> "use strict";
var boolV = true;
console.log(boolV);
// true
console.log(Object.getOwnPropertyDescriptors(boolV));
/*
{}
__proto__: Object { … }
*/
</script>
X.
Format de stockage interne d’une variable « Boolean » avec l’opérateur « new » :
<script type="text/javascript"> "use strict";
var boolO = new Boolean(true);
console.log(boolO);
// Boolean { true }
/*
// AVEC FIREFOX
Boolean
__proto__: Boolean { false }
// AVEC YANDEX
Boolean {true}
__proto__: Boolean
[[PrimitiveValue]]: true
*/
Format Interne des objets
- 18 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
console.log(Object.getOwnPropertyDescriptors(boolO));
// Object { }
/*
{}
__proto__: Object { … }
*/
</script>
XI.
Format de stockage interne d’un « Boolean » sans
l’opérateur « new » :
<script type="text/javascript"> "use strict";
var boolO = Boolean(true);
console.log(boolO);
// true
console.log(Object.getOwnPropertyDescriptors(boolO));
// Object { }
/*
{}
__proto__: Object { … }
*/
</script>
XII.
Format de stockage interne d’un objet « Event » :
<script type="text/javascript"> "use strict";
// Avec YANDEX :
console.log(Event);
Format Interne des objets
- 19 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
// Event() { [native code] }
console.log(Object.getOwnPropertyDescriptors(Event));
// {length: {…}, name: {…}, arguments: {…}, caller:
{…}, prototype: {…}, …}
/*
AT_TARGET:{value: 2, writable:
true, configurable: false}
false,
enumerable:
BUBBLING_PHASE:{value: 3, writable: false, enumerable: true, configurable: false}
CAPTURING_PHASE:{value: 1, writable: false, enumerable: true, configurable: false}
NONE:{value: 0, writable: false, enumerable: true,
configurable: false}
arguments:{value: null, writable: false, enumerable:
false, configurable: false}
caller:{value: null, writable:
false, configurable: false}
false,
enumerable:
length:{value: 1, writable: false, enumerable: false,
configurable: true}
name:{value: "Event", writable:
false, configurable: true}
false,
enumerable:
prototype:{value: Event, writable: false, enumerable:
false, configurable: false}
__proto__:Object
*/
// Avec FIREFOX :
console.log(Event);
Format Interne des objets
- 20 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
// function ()
/*
()
ALT_MASK: 1
AT_TARGET: 2
BUBBLING_PHASE: 3
CAPTURING_PHASE: 1
CONTROL_MASK: 2
META_MASK: 8
NONE: 0
SHIFT_MASK: 4
length: 1
name: "Event"
prototype: EventPrototype
{ composedPath: composedPath(), stopPropagation:
stopPropagation(), stopImmediatePropagation: stopImmediatePropagation(), … }
Symbol(Symbol.hasInstance): undefined
__proto__: function ()*/
console.log(Object.getOwnPropertyDescriptors(Event));
// Object { length: {…}, name: {…}, NONE: {…}, CAPTURING_PHASE: {…}, AT_TARGET: {…}, BUBBLING_PHASE:
{…}, ALT_MASK: {…}, CONTROL_MASK: {…}, SHIFT_MASK:
{…}, META_MASK: {…}, … }
/*
{…}
ALT_MASK: Object { value: 1, writable: false, enumerable: true, … }
AT_TARGET: Object {
enumerable: true, … }
value:
2,
writable:
false,
BUBBLING_PHASE: Object {
false, enumerable: true, … }
value:
3,
writable:
CAPTURING_PHASE: Object {
false, enumerable: true, … }
value:
1,
writable:
Format Interne des objets
- 21 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
CONTROL_MASK: Object { value: 2, writable: false,
enumerable: true, … }
META_MASK: Object {
enumerable: true, … }
value:
8,
writable:
false,
NONE: Object { value: 0, writable: false, enumerable: true, … }
SHIFT_MASK: Object { value: 4, writable: false,
enumerable: true, … }
length: Object { value: 1, writable: false, enumerable: false, … }
name: Object { value: "Event", writable: false,
enumerable: false, … }
prototype: Object { writable: false, enumerable:
false, configurable: false, … }
Symbol(Symbol.hasInstance): Object { writable:
false, enumerable: false, configurable: false, … }
__proto__: Object { … }
*/
</script>
XIII. Les règles concernant l’héritage et les prototypes.
<script type="text/javascript"> "use strict";
// Fonction = objet (« fnprot ») qui
// sera substituée au prototype natif.
function fnprot(){
this.propNProt = "Propriété N Protot"
}
Format Interne des objets
- 22 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
// Constructeur (=objet) cObj
const cObj = function(){
this.nom = "ObjName";
this.date = new Date();
let vLocale = "« Var Locale de cObj »";
(function(){
console.log(vLocale) ;
// Affiche « Var Locale de cObj »
}());
}
// Instanciation de iObj de cObj
const iObj = new cObj();
// Les propriétés locales du constructeur
// sont accessibles depuis l’instance
// via l’identificateur « iObj » de l’instance.
console.log(iObj.nom) // ObjName
console.log(iObj.date)
// Date 2018-05-10T10:01:53.924Z
//
//
//
//
L’instance « iobj » a hérité des
propriétés propres (dans le sens de
« n’appartenant pas au prototype ») grâce
à l’opérateur « this » dans la définition.
// On ne peut pas accéder aux propriétés propres
// d’un constructeur via son nom, en dehors
// de son corps de description
console.log(cObj.nom) //undefined
console.log(cObj.date) //undefined
// Pourtant les deux ont donné, via l’instance,
// cfr plus haut.
// On n’hérite jamais d'une VARIABLE locale.
console.log(iObj.vLocale) // undefined
Format Interne des objets
- 23 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
// Ajout d’une nouvelle propriété au constructeur
cObj.nvpropr="Nouvelle propriété";
// Affichons la nouvelle propriété du constructeur
// « cObj » avec son instance « iObj »
console.log(iObj.sage) // undefined
//
//
//
//
Vous voyez, on ne peut pas hériter d'une
propriété non ajoutée via le prototype en cours.
= Propriétés propres
(non partageables ni héritables)
// Ajout d'une nouvelle propriété via
// le PROTOTYPE par défaut
cObj.prototype.nprotprop = "nvpropviaPrototype"
// Enrichissement du prototype en cours.
console.log(iObj.nprotprop) // nvpropviaPrototype
// L’instance « iObj » a automatiquement
// hérité la nouvelle propriété
// "cObj.prototype.nprotprop" du prototype
// Changeons ("redirigeons") le prototype
// sur une autre fonction (objet).
cObj.prototype = new fnprot()
//
//
//
//
//
//
Les propriétés de l’ancien prototype
(le prototype par défaut lors de la création)
resteront visibles aux instances déjà créées
et celles du nouveau prototype
ne seront visibles qu'aux instances qui seront
créées après la redirection.
console.log(iObj.nprotprop) // nvpropviaPrototype
Format Interne des objets
- 24 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
//
//
//
//
//
Les propriétés du prototype par défaut
sont restées visibles car l'INSTANCE
continue de pointer LE MÊME PROTOTYPE
(ici le prototype par défaut) que
LORS DE SA CRÉATION.
//
//
//
//
//
L'instance créée avant la redirection de
prototype continuant de pointer l’ancien
prototype que lors de sa création, le nouveau
prototype du constructeur n'est pas reconnu
par l'instance pré-existante.
console.log(iObj.propNProt) // undefined
// Créons une nouvelle instance de cObj,
// le constructeur dont on a redirigé le
// prototype.
const iObj2 = new cObj();
// Les propriétés de l'ancien prototype
// (p.e. la « nprotprop ») ne sont pas visibles
// aux objets créés après redirection de prototype.
console.log(iObj2.nprotprop) // undefined
//
//
//
//
Les propriétés du nouveau prototype
sont visibles par les instances du constructeur
créées après redirection de son prototype
vers le nouveau.
console.log(iObj2.propNProt) // Propriété N Protot
</script>
Format Interne des objets
- 25 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
Mots-clés :
format interne, représentation interne, objets, getOwnPropertyDescriptors, propri é t é s, prototype, attributs, descripteurs, string, chaîne de caractères, length, Array,
Tableau, unidimensionnel, monodimensionnel, Number, Boolean, Event
mardi, 2. octobre 2018 (12:00 ).
D’autres publications pouvant intéresser :
• https://www.scribd.com/document/377036251/Le-DosageDes-Medicaments-en-Cac-Cas
• https://www.scribd.com/document/377035454/Le-HasardDes-Thermometres-Non-contact-a-Infrarouge
• https://www.scribd.com/document/376222482/PetiteIntroduction-Aux-Fonctions-JavaScript
• https://www.scribd.com/document/376221919/La-Foi-enJesus-Christ-Pour-Quoi-Faire
• https://www.scribd.com/document/375689778/Lacuitevisuelle-angulaire
• https://www.scribd.com/document/375349851/La-variableThis
• https://www.scribd.com/document/375024162/FonctionsImbriquees-en-JS
Format Interne des objets
- 26 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
• https://www.scribd.com/document/374789297/FormatInterne-Des-Objets-JavaScript
• https://www.scribd.com/document/374788758/Iterations-enJavaScript
• https://www.scribd.com/document/374738470/Le-PlusGrand-Secret-de-La-Creation
• https://www.scribd.com/document/374597969/NouvelleFormule-d-IMC-indice-de-doduite-Selon-Dr-Diasoluka
• https://www.scribd.com/document/373847209/PropertyDescriptors
• https://www.scribd.com/document/373833282/l-ObjetGlobal-Window
• https://www.scribd.com/document/372665249/JavascriptTome-II
• https://www.scribd.com/document/355291488/motiliteoculaire-2
• https://www.scribd.com/document/355291239/motiliteoculaire-I
• https://www.scribd.com/document/355290248/Script-dAnalyses-Des-Reflexes-Pupillomoteurs
• https://www.scribd.com/document/321168468/Renseigneme
nts-Id-et-Anthropometriques
• https://www.scribd.com/document/320856721/Emission-31Jul-2016
• https://www.scribd.com/document/318182982/Complication
-Visuelle-du-Traitement-de-La-Malaria
Format Interne des objets
- 27 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
• https://www.scribd.com/document/318180637/RapportEntre-Oxymetrie-Et-Type-Respiration
• https://www.scribd.com/document/315746265/Classification
-Des-Medicaments
• https://www.scribd.com/document/315745909/Incongruence
s-Heresies-et-Heterodoxies-de-la-Notion-de-Laboratoire
• https://www.scribd.com/document/315745725/RapportEntre-Oxymetrie-Et-Type-Respiration
Format Interne des objets
- 28 / 29 -
mardi, 2. octobre 2018 (12:00 )
J.D.B. DIASOLUKA Nz. Luyalu
JavaScript Tome-IX
DIASOLUKA Nz. Luyalu
Docteur en Médecine, Chirurgie & Accouchements (1977),
CNOM : 0866 - Spécialiste en ophtalmologie (1980)
Études humanités : Scientifique - Mathématiques & Physique.
Informaticien-amateur, Programmeur et WebMaster.
Chercheur indépendant, autonome et autofinancé,
bénévole, sans aucun conflit d’intérêt ou liens
d'intérêts ou contrainte promotionnelle avec qui qu’il
soit ou uelqu’organisme ou institution / organisation
que ce soit, étatique, paraétatique ou privé, industriel
ou commercial en relation avec le sujet présenté.
+243 - 851278216 - 899508675 - 991239212 - 902263541 - 813572818
diasfb@mail2world.com
Format Interne des objets
- 29 / 29 -
mardi, 2. octobre 2018 (12:00 )
Téléchargement