我想从嵌套对象创建一个新对象,如下所示:
function MyObject(){
this.myProp;
this.myMethod = function(){};
this.MyNestedObject = new function(){
this.myNestedProp;
this.myNestedMethod = function(){};
}
}
obj = new MyObject();
myNestedObj1 = new obj.MyNestedObject;
myNestedObj2 = new obj.MyNestedObject;
myNestedObj3 = new obj.MyNestedObject;
我已经尝试了几种变体而没有运气。是否有正确的语法来实现这一目标?
答案 0 :(得分:3)
错误位于new
关键字的行中:
this.MyNestedObject = new function(){
每当你使用new
关键字时,你实际上是在实例化一个新对象,然后它就不再是一个函数了。
试试这个:
function MyObject(){
this.myProp;
this.myMethod = function(){};
this.MyNestedObject = function(){
this.myNestedProp;
this.myNestedMethod = function(){};
}
}
obj = new MyObject();
myNestedObj1 = new obj.MyNestedObject;
答案 1 :(得分:2)
我认为你应该在嵌套对象中省略new
。应该很简单function
:
function MyObject(){
this.myProp;
this.myMethod = function(){};
this.MyNestedObject = function(){ //no need of `new`
this.myNestedProp = 5;
this.myNestedMethod = function(){};
}
}
obj = new MyObject();
myNestedObj1 = new obj.MyNestedObject(); //better user brackets here too
myNestedObj2 = new obj.MyNestedObject();
myNestedObj3 = new obj.MyNestedObject();
您将声明嵌套对象(或者如果您更喜欢OOP术语,然后是嵌套类)作为一个简单函数,当您使用new
调用时,它将作为构造函数解析函数内部的任何this
引用指向新构造的对象。因此,基本上当你致电**new** obj.MyNestedObject();
this.myNestedProp = 5;
在新创建的对象(或myNestedProp
对象)上添加 this
属性。类似地,
this.myNestedMethod = function(){};
在新创建的对象(或myNestedMethod
对象)上添加 this
函数。
如果您在
中省略new
myNestedObj1 = new obj.MyNestedObject();
然后MyNestedObject()
将在MyObject()
的上下文中调用this
。因此obj.MyNestedObject()
内的MyObject()
将指向MyObject()
。因此,在执行上述行之前,obj
和myProp
都将包含三个成员:myMethod
,MyNestedObject
和myNestedProp
,但执行此调用后,它会将myNestedMethod
和MyObject()
添加到obj
的定义中,后者又出现在{{1}}内。