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

时间:2012-04-07 02:06:19

标签: javascript object nested

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

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

    function EmbeddedObj(id) {
        this.id = id;
    }
}

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

var myEmbeddedObj = new MyObj.EmbeddedObj();

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

3 个答案:

答案 0 :(得分:8)

是的,没有。

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

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

请注意,在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;

答案 1 :(得分:3)

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

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

var myEmbeddedObj = new MyObj.EmbeddedObj();

这看起来像你追求的那样吗?

答案 2 :(得分:0)

以下是嵌套构造函数的示例。

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);

我猜这就是嵌套对象构造函数的含义。