2016-08-12 114 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();