我可以从嵌套对象创建一个新的Javascript对象吗?

时间:2014-02-04 13:40:06

标签: javascript oop object

我想从嵌套对象创建一个新对象,如下所示:

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;

我已经尝试了几种变体而没有运气。是否有正确的语法来实现这一目标?

2 个答案:

答案 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()。因此,在执行上述行之前,objmyProp都将包含三个成员:myMethodMyNestedObjectmyNestedProp,但执行此调用后,它会将myNestedMethodMyObject()添加到obj的定义中,后者又出现在{{1}}内。

enter image description here