Define a “nested” object constructor in JavaScript?

前端 未结 3 1835
谎友^
谎友^ 2021-01-02 11:46

Is it possible to define an object within another object? I\'m thinking something like this:

function MyObj(name) {
    this.name = name;

    function Embed         


        
相关标签:
3条回答
  • 2021-01-02 12:24
    function MyObj(name) {
        this.name = name;
    }
    
    MyObj.EmbeddedObj = function(id) {
        this.id = id;
    }
    
    var myEmbeddedObj = new MyObj.EmbeddedObj();
    

    Does that look like what you're after?

    0 讨论(0)
  • 2021-01-02 12:30

    Here is example of nested constructor.

    function cimdb(name,review,year) {
    
     function nestedConstructor(name,review,year) {
        this.name = name;
        this.review = review;
        this.year = year
    };
    
        this.name = name;
        this[name] = new nestedConstructor(name,review,year);
    
    }
    
    
    
      var lionking = new cimdb("The Lion King", "The lion King review ..", 2015);
    

    I guess this is what you mean by nested object constructor.

    0 讨论(0)
  • 2021-01-02 12:37

    Yes, and no.

    function MyObj(name) {
        this.name = name;
    }
    MyObj.EmbeddedObj = function EmbeddedObj(id) {
        this.id = id;
    }
    new MyObj.EmbeddedObj(42);
    

    Would run, but it might not yield the expected results for "embedded object" (see comment).

    Note that in the case of new expr the expression is evaluated first so, in this case it creates a new object using the function-object evaluated from MyObject.EmbeddedObj as a constructor. (There is a silly rule with parenthesis in the expression, but that's another story.)


    Now, if a "parent" and "child" relationship was desired, that could be done, using a more round-about method:

    function Parent (name) {
       this.name = name;
       var parent = this; // for closure
       this.Child = function Child () {
          this.Parent = parent;
       }
    }
    
    // create new parent object
    var parent = new Parent();       
    // each new parent has a different Child constructor and
    // any function-object can be used as a constructor
    var child = new parent.Child();
    // true: child is "bound" to parent
    child.Parent === parent;
    
    0 讨论(0)
提交回复
热议问题