javascript - examples - Explicar esta confusa sintaxis tutorial de dojo para declarar
dojo tutorial (1)
Bueno, considéralo un constructor sobrecargado:
// class with a name
declare(className: String, superClass: Array, classDeclaration: Object);
// class without a name
declare(superClass: Array, classDeclaration: Object);
Use una matriz vacía []
o null
para ninguna superClass
.
NB: A partir de Dojo 1.8, no hay necesidad de clases con nombre, porque dojo/parser
puede usar un ID de módulo ( mid
, por ejemplo, "mynamespace/MyClass"
) para la "mynamespace/MyClass"
de instancias. Considero que las clases con nombre están obsoletas y en contra de la mantenibilidad del código.
Estoy leyendo la sintaxis para usar la declaración de dojo para la creación de clases. La descripción es confusa:
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 sintaxis es exactamente la misma para crear una clase no nombrada y una clase sin superclase:
var MyClass = declare(null, {
// Custom properties and methods here
});
Espero que la sintaxis de una clase sin superclase y sin ningún nombre sea así:
var MyClass = declare(null, null, {
// Custom properties and methods here
});
Vengo de un contexto de lenguaje mecanografiado, así que tal vez no entendí cómo funciona esto en JavaScript. No entiendo cómo alguien que lee el código (sin ningún comentario) sabrá la diferencia entre los dos, si la sintaxis de los tutoriales es correcta.
Hubiera esperado que la sintaxis fuera algo como esto:
/*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, {})
Quizás esto es detallado, pero al menos es fácil decir para qué sirve cada parámetro.