×
Vytvárame riešenia

Chybové hlásenie: object is not a function (Dojo)

Pri práci s widgetmi alebo modulmi môže programátor na raziť na problém prázdnych modulov Object {} a chybové hlásenie: TypeError {info: "object is not a function", stack: (...), message: "object is not a function"}info: "object is not a function"message: "object is not a function"stack: (...)get stack: function () { [native code] }set stack: function () { [native code] }__proto__: Error .
Detegovať dôvod tejto chyby je extrémne náročné. Sám sa priznám, že som túto chybu nevedel identifikovať 4 mesiace. Až keď sa mi vyskytla na ďalšom projekte začal som hĺbkovú analýzu problému. Dôvodom vzniku tejto chyby sú najmä nedostatočne kvalitné nástroje pre vývoj front-end aplikácií, kde Eclipse, Visual Studio a ani NetBeans nepodporujú AMD.
Táto chyba vzniká cyklením modulov. Príklad takéhoto cyklenia ukážem na príklade.
Príklad: Obsah súboru index.html.
1
2
3
4
5
require(["Module-1", "dojo/ready"], function (Module1, ready) {
ready(function () {
new Module1();
});
});
Príklad: Obsah súboru Module-1.js.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
define([
"dojo/_base/declare",
"Module-2"
],
function (declare, Module2) {
return declare([], {
constructor: function () {
this.display();
var module2 = new Module2();
console.log(module2);
},
display : function() {
console.log("module 1");
}
});
});
Príklad: Obsah súboru Module-2.js.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
define([
"dojo/_base/declare",
"Module-3"
],
function (declare, Module3) {
return declare([], {
constructor: function () {
this.display();
var module3 = new Module3();
console.log(module3);
},
display : function() {
console.log("module 2");
}
});
});
Príklad: Obsah súboru Module-3.js.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
define([
"dojo/_base/declare",
"Module-1"
],
function (declare, Module1) {
return declare([], {
constructor: function () {
this.display();
// TypeError {stack: (...),
// message: "number is not a function"}
var module1 = new Module1();
console.log(module1);
},
display : function() {
console.log("module 3");
}
});
});
Ako vidieť, v poslednom module sa nahráva modul č.1, čo spôsobí, že premenná Module1 je Object {}. Cyklenie tak spôsobí pád aplikácie.

Záver

Je veľa rôznych chýb, ktoré nie sú dostatočne zdokumentované. Ak poznáte aj vy dáke, ktoré ohrozujú chod aplikácií, podeľte sa o ne prostredníctvom komentára.


Dojo,programovanie,error,JavaScript
Žiadna časť tohto článku nesmie byť reprodukovaná bez uvedenia autora a URL na túto stránku.
Viac informácií nájdete v sekcii O projekte.

Komentáre

Článok neobsahuje zatiaľ žiadne komentáre.

Pridať komentár

Meno (povinné)
Web
Správa (povinné)
Odoslať
Od najnovších