是否可以在另一个对象中定义一个对象?我在想这样的事情:
function MyObj(name) {
this.name = name;
function EmbeddedObj(id) {
this.id = id;
}
}
然后我可以像这样创建一个 EmbeddedObj:
var myEmbeddedObj = new MyObj.EmbeddedObj();
奖励积分的模因:反对!:o
是否可以在另一个对象中定义一个对象?我在想这样的事情:
function MyObj(name) {
this.name = name;
function EmbeddedObj(id) {
this.id = id;
}
}
然后我可以像这样创建一个 EmbeddedObj:
var myEmbeddedObj = new MyObj.EmbeddedObj();
奖励积分的模因:反对!:o
是的,没有。
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;
function MyObj(name) {
this.name = name;
}
MyObj.EmbeddedObj = function(id) {
this.id = id;
}
var myEmbeddedObj = new MyObj.EmbeddedObj();
这看起来像你所追求的吗?
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);
我想这就是嵌套对象构造函数的意思。