2010-02-01 3 views
1

protoypal 상속에 대해 머리를 맞대고 공유 멤버 변수에 대한 질문이 있습니다.protoypal 상속을 사용하여 JavaScript에서 멤버 변수를 초기화하는 방법

나는 객체가 있습니다

var objA = { 
    list: [], 
    myPush: function(aParam){ 
     this.list.push(aParam); 
    } 
} 

http://javascript.crockford.com/prototypal.html

var objB = object(objA); 

에서 개체() 함수와 함께 "protoypal 상속"을 시도하지만 어떻게 든 objA에 변화가 objB에 옮겨진됩니다 :

objA.myPush('a string'); 
equals(objA.list.length, 1); 
equals(objB.list.length, 0); //<= Fails. Why? 

실패한 테스트의 전체 코드는입니다.

누군가이 설명을 해줄 수 있습니까? 그리고 가능한 수정. 나는 constuct() 함수를 가질 수는 있지만 이것은 옳지 않은 것처럼 보입니다. 이전 스레드에서 노출로 미리

마티아스

답변

1

에서

덕분에, 크록 포드의 객체 기능은 약간 나뉩니다. 문제의 SO 스레드를 찾을 수 있는지 보겠습니다.

은 "전통적인"생성자 상속 작동 :

var a = { 
    list: [], 
    myPush: function(aParam){ 
     this.list.push(aParam); 
    } 
} 

function B() {} 
B.prototype = a; 

var b = new B(); 
a.myPush('a string'); 

b.list.length == a.list.length; // true 

이 약간 덜 순수한 "적절한"프로토 타입 상속보다 - 생성자는 객체에서 상속 대신 객체의 객체에서 상속합니다. 네, 어떻게 든 나에게 맞는 느낌이 들지 않습니다. 그리고 아뇨, Crockford의 목적 함수가 왜 실패했는지 설명 할 수 없습니다. 그것은 내가 생각하기에 세계가 작동하는 방식 일뿐입니다.

갱신은 : 포인터에 대한 Implementing instance methods/variables in prototypal inheritance

+0

감사 : 여기에 내가 생각했던 관련 논의합니다. 흥미롭게도 당신과 다른 포인터는 Crockfords의 권고에 대한 해결책을 사용합니다. 초보자가 결정하기 어려운 일종. – luebken

관련 문제