Define a "nested" object constructor in JavaScript?
javascript, nested, object
Solution
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;
Problem
Is it possible to define an object within another object? I'm thinking something like this: ``` function MyObj(name) { this.name = name; function EmbeddedObj(id) { this.id = id; } } ``` And I could then create an EmbeddedObj like this: ``` var myEmbeddedObj = new MyObj.EmbeddedObj(); ``` Meme for bonus points: Objectception! :o