OOjs
OOjs (abréviation de "Object-oriented JavaScript" pour "JavaScript Orienté Objet") est une librairie JavaScript destinée à manipuler des objets. Les fonctionnalités comprennent l'héritage , les mixins , l'héritage statique , et d'autres utilités pour travailler sur les objets et les tableaux. Elle fournit aussi un mixin EventEmitteur pour la programmation orientée événement, et un pattern d'usine pour découpler les consommateurs de fonctionnalités de l'implémentation d'une classe spécifique.
Fonctionnalités
OO.inheritClass( childClass, parentClass )
Etend le prototype et les méthodes statiques ainsi que les propriétés du constructeur fils à partir d'un constructeur parent.
OO.mixinClass( childClass, parentClass )
Copie dans un constructeur fils, le prototype et les méthodes statiques avec les propriétés, à partir d'un constructeur parent.
Initialise une classe de base par laquelle se fait l'héritage, ou qui sera mixée dans une classe fils. N'est nécessaire que pour les classes qui n'héritent pas ou qui ne sont pas mixées à d'autres classes.
Permet d'attacher les gestionnaires d'événements, de les appeler quand les événements se produisent et de les détacher.
Fournit une interface simple de correspondance permettant d'associer des données arbitraires à un nom symbolique.
Enregistrement des classes avec abstraction de l'instanciation.
Outils
Voir la documentation de l'API pour une référence complète sur les utilitaires disponibles.
Compatibilité
OOjs est optimisé pour les environnements modernes ECMAScript 5. Le code source est compatible avec l'ancien moteur ECMAScript 3 (comme dans les anciennes versions de Internet Explorer, d'une manière générale l'IE8 et les précédents), mais les utilisateurs ont besoin d'un polyfill afin de disposer des méthodes ECMAScript 5 nécessaires.
Il est livré pour être exécuté soit dans les navigateurs web ou dans Node.js.
Extending OOjs classes in newer versions of ECMAScript
MediaWiki's ResourceLoader treats JavaScript code as ES6 by default since MediaWiki 1.41.
ES6 supports the class
syntax, so you may declare your extensions of OOjs (and OOUI ) classes using the new syntax.
For example:
class MyDialog extends OO.ui.MessageDialog {
static get name() {
return 'myDialog';
}
constructor(config) {
super(config);
// ...
}
initialize() {
super.initialize();
// ...
}
}
However, you will then need to pass such a class through a helper function like this:
function es6ClassToOoJsClass(targetClass) {
const originClass = Object.getPrototypeOf(targetClass);
OO.initClass(originClass);
targetClass.static = Object.create(originClass.static);
Object.getOwnPropertyNames(targetClass)
.filter((key) => key !== 'static')
.forEach((key) => {
const descriptor = Object.getOwnPropertyDescriptor(targetClass, key);
if (descriptor.enumerable || descriptor.get) {
targetClass.static[key] = targetClass[key];
}
});
targetClass.parent = targetClass.super = originClass;
return targetClass;
}
It assumes that the class has no static properties with a getter whose output is not fixed (which is unlikely).
If you're building your JavaScript project with a transpiler like Babel, you can also use the most modern syntax, with static properties declared as such:
static name = 'myDialog';
Espace de noms
En présence d'un système de modules tel que dans Node.js, OOjs exporte toutes ses classes et ses méthodes.
Dans les autres environnements, tels que les navigateurs web, la variable globale OO
est créée.
Vous pouvez accéder à OO
de la même manière que vous accédez à jQuery
ou mediaWiki
.
Si vous utilisez eslint, vous devez ajouter ceci dans votre fichier .eslintrc.json
:
"globals": {
"OO": "readonly"
}
Voir aussi
OOjs
|
Liens externes
- Source code on phabricator.wikimedia.org/diffusion/ (GitHub mirror)
- Package on npmjs.org
- Phabricator project (issue tracker)
- API Documentation
- Community-created TypeScript definitions for OOjs (work in JavaScript projects as well in popular IDEs).
the Editing department assure la maintenance de OOjs.
Obtenir de l'aide :
|