Nested class in JavaScript

2019-09-21 04:47发布

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?

2条回答
Deceive 欺骗
2楼-- · 2019-09-21 04:50

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
查看更多
3楼-- · 2019-09-21 05:13

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.

查看更多
登录 后发表回答