2014-01-28 38 views
0

我是JavaScript新手,在查看一些JavaScript範圍和垃圾收集之後,我仍然不確定這樣做的正確方法。Javascript返回在函數內部創建的對象

我想要一個函數,其任務是創建一個具有某些屬性的對象並返回它。我擔心的是,函數中創建的對象是否會超出範圍並被拋棄。所以基本上哪一個更好,還是他們都錯了?

function createObject() { 
      var obj = new MyObject(); 
      // set some object properties here 
      return obj; 
    } 

    function createObject2(object) { 
      // set properties of the input object here 
    } 

我會打電話給我的功能,像這樣:

myOjbect = createObject(); 
    myOjbect2 = new MyObject(); 
    createObject2(myObject2); 

基本上我更喜歡第一種方式,但我會擔心垃圾收集,這將是更好的傳遞的參考我的對象進入函數而不是在函數本身中創建我的對象?

+1

垃圾收集在JavaScript中,只有當你打破所有對對象的引用情況。 –

回答

4

基本上我更喜歡第一種方式,但我會擔心垃圾收集

號當你

myOjbect = createObject(); 

然後myOjbect參考內部創建的對象功能。只要這個變量「存在」並且保持對該對象的引用,它就不會被垃圾收集。

+0

感謝您的解釋。它簡短明瞭! – Penguinator

0

第一個比較好。你可以在函數中設置你想要的所有東西。如果您返回,它將在調用範圍內有效。

var createObj = function(name) { 
    var age = 13; 
    var hidden = "hello"; 
    return { 
     age : age,  //you can refer a var from this function 
     name : name, //you can use params 
     gender : "male" //you can set new properties 
    }; 
} 

var myObj1 = createObj("Penguinator"); 

console.log(myObj1.name); 
//Will output --> Penguinator 

console.log(myObj1.age); 
//Will output --> 13 

console.log(myObj1.male); 
//Will output --> "male" 

console.log(myObj1.hidden); 
//Will output --> undefined <<-- you can't access this var 
+0

我不認爲Penguinator打算在createObj中創建一個新對象。看起來他想修改一個自定義對象。 'MyObject' –

相關問題