2011-12-10 3 views
1

... status() 방법은 존재하지 않고 내가 그렇게 같은 return { ... }를 제거한다면 나는, 그러나 :(를 호출 할 수 없습니다 ...개체의 프로토 타입 체인에서 호출 할 수있는 메서드는 언제 있습니까?

var org = {}; 

org.Organization = function() { 

    var app = null; 
    function setupApplication() {}; 

    return { 
     init : function() { 
      console.log("init"); 
     } 
    } 
}; 

org.Organization.prototype = { 
    status : function() { 
     console.log("status"); 
    } 
}; 

var myOrg = new org.Organization(); 
myOrg.init();  // outputs "init" 
myOrg.status(); // TypeError: Object #<Object> has no method 'status' 

...이 코드를 고려

var org = {}; 

org.Organization = function() { 

    var app = null; 
    function setupApplication() {}; 
}; 

org.Organization.prototype = { 
    status : function() { 
     console.log("status"); 
    } 
}; 

var myOrg = new org.Organization(); 
myOrg.init();  // TypeError: Object #<Object> has no method 'init 
myOrg.status(); // outputs "status" 
가 ... 다음 status() 방법이 존재하고 내가 아무런 문제없이 호출 할 수 있습니다. 왜 이런 일이? 왜 프로토 타입 체인에 방법은 원래의 오브젝트가 return { ... }이없는 경우에만?라는 return { ... } 덮어 쓰기를합니까 할 수 있습니다 또는 프로토 타입 cha의 메소드보다 우선 함 에서?

답변

4

함수 생성자에서 return obj을 사용하면 내부적으로 생성 된 개체가 아니라 실제 개체가 반환됩니다. 당신이 제대로 작동하려면, 간단히과 같이 생성자에서 초기화를 정의

this.init = function() { }; 

몇 가지 자세한 정보를 제공하기 위해 : 당신이 new Func를 호출 할 때, 어떤 내부적으로 발생하는 프로토 타입을 가진 새로운 개체 (설정이다 함수의 프로토 타입)이 생성되고 생성자 함수가 this으로 설정된 개체와 함께 호출됩니다. 생성자의 끝에서 다른 객체를 수동으로 반환하지 않는 한 동일한 객체가 반환됩니다.이 경우 해당 객체가 반환되며 이는 분명히 동일한 프로토 타입이 아닙니다.

+0

+1 ohhhhh ... 많은 의미가 있습니다! 고마워요 :) – Hristo

+0

다행히 도왔습니다! – deviousdodo