미안하지만 미안하지만 초보자입니다. Javascript에서는 클래스 자체의 생성물을 사용하여 이미 정의 된 객체 클래스를 확장하는 가장 좋은 방법은 무엇입니까? 예를 들어, 일부 속성 및 메서드가 내장 된 클래스 Sprite
이 있다고 가정합니다. 나는 여분의 속성을 갖고 싶습니다. Sprite.position
position
부분은 두 개의 속성 position.x
과 position.y
을 가진 클래스입니다. 그리고 그것은 하나의 인스턴스가 아니라 클래스 Sprite
(과거와 미래)의 모든 인스턴스를 적용하기를 원합니다. position
이 간단한 입력 데이터 (숫자 또는 문자열)이면 Sprite.prototype.position='there'
을 쓸 수 있습니다. 또한 position
배열했다면 그것은 쉬웠을 것이다 : 그냥 Sprite.prototype.position="there"
, 또는 심지어 배열 배열을 이런 식으로 쓸 것이라고 ... 그러나 만약 position
클래스의 경우? 일반적으로 "클래스"를 구축하는 하나의 객체 생성자를 사용합니다 :자바에서 이미 정의 된 클래스에 서브 클래스 프로토 타이핑
function position(x,y) {
this.x = x;
this.y = y;
}
을하지만 그때 나는 var myPosition = new position(0,0);
으로 position
객체를 인스턴스화해야하지만 위치 객체가 나는 새로운 Sprite
객체를 생성 할 때마다 존재합니다. 내가 Sprite.prototype.position=new position(0,0);
을 쓰는 것이 문제가되는 경우 : mySprite1.position.x=2
을 정의하면 2
값은 Sprite 클래스의 모든 속성 중 position.x
속성에도 지정됩니다. 이 명령은 Sprite.prototype.position='there'
명령으로 발생하지 않습니다.이 경우 모든 istance는 자신의 별도 값을 보유하게됩니다. 별도의 독립적 인 "위치"객체를 사용하여 모든 기능을 원합니다.
쉬운 선형 방식으로 원하는 것을 할 수 있습니까?
은'Sprite' 생성자에서'Position'의 새로운 인스턴스를 생성하는 잘못은 무엇? 좋은 접근 방법 같아. – elclanrs
* "position이 배열 인 경우에도 간단합니다. 단지'Sprite.prototype.position = [0,0]'"라고 쓰십시오. * Sprite.prototype.position = new SomeClass();와 똑같습니다. '두 경우 모두 ** 모든 ** Sprite 객체는 ** 동일한 ** 배열 또는 객체를 나타냅니다. 그래서 당신의 예제에서'sprite1.position [0] = 2;'는'sprite1.postion === sprite47.position' 때문에'sprite47.position [0]'은 이제'2'라는 것을 의미합니다. –
* "... 왜냐하면'sprite1.postion === sprite47.position' ..."* 글쎄, 만약 내가'postion'에서 처음'i'를 놓치지 않았다면 말입니다. ;-) –