Expliquez cette syntaxe de tutorial dojo confuse pour déclarer

Je lis la syntaxe pour utiliser la déclaration de dojo pour la création de la classe. La description est source de confusion:

The declare function is defined in the dojo/_base/declare module. declare accepts three arguments: className, superClass, and properties. ClassName The className argument represents the name of the class, including the namespace, to be created. Named classes are placed within the global scope. The className can also represent the inheritance chain via the namespace. Named Class // Create a new class named "mynamespace.MyClass" declare("mynamespace.MyClass", null, { // Custom properties and methods here }); A class named mynamespace.MyClass is now globally available within the application. Named classes should only be created if they will be used with the Dojo parser. All other classes should omit the className parameter. "Anonymous" Class // Create a scoped, anonymous class var MyClass = declare(null, { // Custom properties and methods here }); The MyClass is now only available within its given scope. SuperClass(es) The SuperClass argument can be null, one existing class, or an array of existing classes. If a new class inherits from more than one class, the first class in the list will be the base prototype, the rest will be considered "mixins". Class with No Inheritance var MyClass = declare(null, { // Custom properties and methods here }); null signifies that this class has no classes to inherit from. Class Inheriting from Another Class var MySubClass = declare(MyClass, { // MySubClass now has all of MyClass's properties and methods // These properties and methods override parent's }); 

La syntaxe est exactement la même pour créer une classe non nommée et une classe sans superclasse:

 var MyClass = declare(null, { // Custom properties and methods here }); 

Je m'attends à la syntaxe d'une classe sans classe super et sans nom pour être comme ceci:

 var MyClass = declare(null, null, { // Custom properties and methods here }); 

Je viens d'un contexte de langue dactylographié, donc peut-être j'ai mal compris comment cela fonctionne en JavaScript. Je ne comprends pas comment quelqu'un lisant le code (sans aucun commentaire) connaitrait la différence entre les deux, si la syntaxe des didacticiels est correcte.

Je m'attendais à ce que la syntaxe soit comme ceci:

 /*class without a name:*/ declare(null, SuperClass, {}) /*class without a name or super class:*/ declare(null, null, {}) /*class with a name but no super class:*/ declare("ClassName", null, {}) 

Peut-être que cela est détaillé, mais au moins il est facile de dire pour quel paramètre correspond chaque paramètre.

Eh bien, pensez-y un constructeur surchargé:

 // class with a name declare(className: String, superClass: Array, classDeclaration: Object); // class without a name declare(superClass: Array, classDeclaration: Object); 

Utilisez un tableau vide [] ou null pour aucune superClass .

NB: à partir de Dojo 1.8, il n'y a pas besoin de classes nommées, car dojo/parser peut utiliser un identifiant de module ( mid , par exemple "mynamespace/MyClass" ) pour l'instanciation. Je considère que les classes nommées sont obsolètes et contre la maintenabilité du code.