2014-09-16 4 views
3

나는 이런 식으로 뭔가를 가정.으로 반복 생성자 체인까지

그러나 C() 함수, B() 함수, A() 함수를 반환 할 수 있도록 C() 인스턴스에서 시작하여 생성자 함수를 "반복"할 수 있습니까? 또 다른 인스턴스.

+0

반복 함수는 무엇을 의미합니까? –

답변

3

는 당신은 프로토 타입 체인을 반복 할 것이다, 그러나

for (var o=inst; o!=null; o=Object.getPrototypeOf(o)) 
    console.log(o); 
// {} 
// C.prototype 
// B.prototype 
// A.prototype 
// Object.prototype 

를 수행하여 프로토 타입을 반복 할 수 있습니다. "생성자 체인"같은 것은 없습니다. 당신이 생성자에 액세스하려면 상속 적절 때, 당신은 프로토 타입에 set the .constructor property해야합니다

function A() {} 

function B() {} 
B.prototype = Object.create(A.prototype); 
B.prototype.constructor = B; 

function C() {} 
C.prototype = Object.create(B.prototype); 
C.prototype.constructor = C; 

var inst = new C(); 

for (var c=inst.constructor; c!=null; (c=Object.getPrototypeOf(c.prototype)) && (c=c.constructor)) 
    console.log(c); 
// C 
// B 
// A 
// Object 

어느 그때 다른 인스턴스를 인스턴스화하는 데 사용할 수있는

만 것 "체인"이 아니라, C을 알아야합니다. C.prototype.constructor을 올바르게 설정 한 경우 inst.constructor을 통해 액세스 할 수 있습니다.

그러나 임의 생성자에서 개체를 인스턴스화하는 것은 좋지 않을 수 있습니다. 당신은 필요한 매개 변수를 모른다. actually want to do이 무엇인지 모르겠지만 요청 사항이 디자인 결함을 암시 할 수 있습니다.

0

개체 프로토 타입의 생성자 속성을 사용하여 체인으로 이동하십시오. 코드 후 예를 들어

, : 등

inst.constructor.prototype.constructor === A 

... 그리고 같은

C.prototype.constructor === A 

는 사실이다.