在JavaScript中定义"嵌套"对象构造函数?

Ell*_*lle 8 javascript nested object

是否可以在另一个对象中定义一个对象?我在想这样的事情:

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

    function EmbeddedObj(id) {
        this.id = id;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以像这样创建一个EmbeddedObj:

var myEmbeddedObj = new MyObj.EmbeddedObj();
Run Code Online (Sandbox Code Playgroud)

奖励积分的Meme:对象!:○

小智 8

是的,不.

function MyObj(name) {
    this.name = name;
}
MyObj.EmbeddedObj = function EmbeddedObj(id) {
    this.id = id;
}
new MyObj.EmbeddedObj(42);
Run Code Online (Sandbox Code Playgroud)

会运行,但它可能不会产生"嵌入对象"的预期结果(请参阅注释).

请注意,在首先new expr计算表达式的情况下,在这种情况下,它使用作为构造函数计算的函数对象创建一个新对象.(表达式中有一个带括号的愚蠢规则,但这是另一个故事.)MyObject.EmbeddedObj


现在,如果需要"父"和"子"关系,可以使用更圆整的方法来完成:

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;
Run Code Online (Sandbox Code Playgroud)