2014-01-28 3 views
0

자바 스크립트를 처음 사용하고 자바 스크립트 범위 지정 및 가비지 수집을 조금보고 난 후에도이 작업을 수행하는 올바른 방법이 무엇인지 아직 확실하지 않습니다.함수 내에서 생성 된 자바 스크립트 반환 객체

특정 속성을 가진 개체를 만들고 반환하는 기능을 갖고 싶습니다. 내 걱정은 함수에서 생성 된 객체가 범위를 벗어나 덤프되는지 여부입니다. 그럼 기본적으로 다음 중 어느 것이 더 낫지 않습니까? 아니면 둘 다 잘못입니까?

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

는 기본적으로 나는 첫 번째 방법을 선호 싶지만, 가비지 컬렉션에 대해 걱정해야의 참조를 전달하는 것이 더 될 것이다 :

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

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

나는 그렇게처럼 내 함수를 호출 할 것 함수 내 객체를 만드는 대신 함수 내 객체?

+1

자바 스크립트의 가비지 수집은 객체에 대한 모든 참조를 끊을 때만 발생합니다. –

답변

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' –

관련 문제