2016-08-12 111 views
0

我想添加一个子对象的物体,像添加子对象到对象

var myObj = myObj || {}; 
myObj.prototype.subObj = { 
    'funk': function() { 
    console.log('Funky success'); 
    } 
}; 

,但我不断收到错误

Uncaught TypeError: Cannot set property 'subObj' of undefined

+0

因为原型是未定义 – atul

+0

的*原型*是*函数*不*对象的属性*。您可以将您的子对象附加到* myObj.subObj *。 –

+1

对象的实例没有原型。类型(它的构造函数)有它。 –

回答

2

如果你想使用的原型,你必须创建您的物品与功能:

function myObj() { } 

myObj.prototype.subObj = { 
    'funk': function() { 
    console.log('Funky success'); 
    } 
}; 

var obj = new myObj(); 
obj.subObj.funk(); // => 'Funky success' 

但你可以始终做到:

var myObj = {} 

myObj.subObj = { 
     'funk': function() { 
     console.log('Funky success'); 
     } 
    }; 

myObj.subObj.funk(); // => 'Funky success' 
0
let myObj = { 
    subObj: { 
     funk: function() { 
      // whatever 
     } 
    } 
} 
+0

这是我试图设置命名空间的一个过于简单化的例子,也就是说,我将在单独的文件中声明这些子对象以保持一切清洁,因此您在这里完成的操作对我而言不起作用。但评论中的人让我摆脱了麻烦。不管怎么说,还是要谢谢你! – wogsland

0

您不能分配到myObj.prototype.subObj除非myObj.prototype已经存在,并且包含一个对象。 Javascript不会自动在层次结构中创建中间对象。所以,你可以这样做:

var myObj = myObj || { prototype: {} }; 
myObj.prototype.subObj = { 
    'funk': function() { 
    console.log('Funky success'); 
    } 
}; 
0

在一个非常相似的方式在ES6你的方法,你可以放心地做这样的;

var myObj = myObj || {}; 
 
myObj.__proto__.subObj = { 
 
    'funk': function() { 
 
    console.log('Funky success'); 
 
    } 
 
}; 
 

 
myObj.subObj.funk();

但你也可以使用Object.create()方法如下:

var prototype = { 
 
       subObj : { 
 
          funk: function() { 
 
            console.log('Funky success'); 
 
           } 
 
          } 
 
       }, 
 
     myObj = myObj || Object.create(prototype); 
 
myObj.subObj.funk();