Nested class in JavaScript
I'm a totally newbie in JavaScript, which i need for a new project. And now I have a problem:开发者_开发百科
var main = new function() {
this.init = new function() {
//access something.init();
};
this.something = new function () {
this.init = function(){
//do something
//execute somethingother()
};
this.somethingother = function(){
//do something
};
};
};
main.init();
Can you please help me?
If you want to nest functions inside function - you CAN, but you should learn javascript syntax, how lexical scope and variable hoisting works, and overall - read Douglas Crockford's articles (or watch his videos).
The code you have shown will not work, try to look at my modification of it, and understand the difference.
var Main = function() {
/* this function is a constructor */
var m = this; // store scope
// do your init stuff
m.boringCollection = {
/* simple object with function inside */
/* notice JSON style formatting */
doStuff : function(){
//do something
},
doOtherStuff : function(){
//do something else
};
};
m.coolConstructor = function () {
var cc = this; // store scope
var sleep = true; // just an example variable
cc.moveMyself = function(){
//do something
};
cc.init = function() {
sleep = false; // just an example
cc.moveMyself(); // will work
cc.work(); // will FAIL, because function work is defined after its called
};
cc.work = function() {
// do some work
};
};
};
var main = new Main(); // make new instance of Main
main.boringCollection.doOtherStuff(); // will work
main.coolConstructor.init(); // will NOT work
var scrappy = new main.coolConstructor(); // make new instance of m.coolConstructor
scrappy.init(); // will work
JavaScript doesn't have classes out of the box. You need to implement classes yourself.
One popular implementation is JS.Class, if you don't want to write your own implementation.
精彩评论