기본 클래스의 멤버에 액세스하는 중
TypeScript 사이트의 놀이터에서 상속 예를 참조하십시오.
class Animal {
public name;
constructor(name) {
this.name = name;
}
move(meters) {
alert(this.name + " moved " + meters + "m.");
}
}
class Snake extends Animal {
constructor(name) {
super(name);
}
move() {
alert("Slithering...");
super.move(5);
}
}
class Horse extends Animal {
constructor(name) {
super(name);
}
move() {
alert(super.name + " is Galloping...");
super.move(45);
}
}
var sam = new Snake("Sammy the Python");
var tom: Animal = new Horse("Tommy the Palomino");
sam.move();
tom.move(34);
코드의 한 줄을 변경했습니다.경고:Horse.move()
액세스 하고 싶다.super.name
하지만, 그것은 단지undefined
IntelliSense는 제가 사용할 수 있고 TypeScript가 정상적으로 컴파일되지만 동작하지 않습니다.
좋은 생각 있어요?
작업 예아래의 주의사항.
class Animal {
constructor(public name) {
}
move(meters) {
alert(this.name + " moved " + meters + "m.");
}
}
class Snake extends Animal {
move() {
alert(this.name + " is Slithering...");
super.move(5);
}
}
class Horse extends Animal {
move() {
alert(this.name + " is Galloping...");
super.move(45);
}
}
var sam = new Snake("Sammy the Python");
var tom: Animal = new Horse("Tommy the Palomino");
sam.move();
tom.move(34);
공용 변수에 이름을 수동으로 할당할 필요가 없습니다.사용.
public name
컨스트럭터 정의에서 이 작업을 수행할 수 있습니다.전화 안 해도 돼
super(name)
전문계급에서요.사용.
this.name
작동하다.
사용에 관한 주의사항super
.
이에 대한 자세한 내용은 언어 사양 섹션 4.9.2를 참조하십시오.
에서 상속되는 클래스의 동작Animal
는 다른 언어의 동작과 다르지 않습니다.다음을 지정해야 합니다.super
특정 함수와 기본 클래스 함수 간의 혼동을 피하기 위해 키워드를 지정합니다.예를 들어, 전화했을 경우move()
또는this.move()
전문 기술자를 상대하게 될 것입니다.Snake
또는Horse
기능하기 때문에super.move()
는 베이스 클래스 함수를 명시적으로 호출합니다.
인스턴스의 속성이기 때문에 속성이 혼동되지 않습니다.와는 차이가 없다.super.name
그리고.this.name
- 심플하게this.name
그렇지 않으면 전문 클래스인지 기본 클래스인지에 따라 다른 이름을 가진 말을 만들 수 있습니다.
키워드를 사용하고 있습니다.super
그리고.this
잘못되어 있습니다.다음은 올바른 예시를 제시합니다.
class Animal {
public name: string;
constructor(name: string) {
this.name = name;
}
move(meters: number) {
console.log(this.name + " moved " + meters + "m.");
}
}
class Horse extends Animal {
move() {
console.log(super.name + " is Galloping...");
console.log(this.name + " is Galloping...");
super.move(45);
}
}
var tom: Animal = new Horse("Tommy the Palomino");
Animal.prototype.name = 'horseee';
tom.move(34);
// Outputs:
// horseee is Galloping...
// Tommy the Palomino is Galloping...
// Tommy the Palomino moved 45m.
설명:
첫 번째 로그는 다음 다이내믹 값을 기록합니다.
super.name
이 값은 정적 문자열 값으로 진행됩니다."is Galloping..."
. 키워드this
오브젝트의 "슬롯 체인"을 참조합니다.tom
오브젝트가 아닌tom
자체입니다. 왜냐하면 우리는 이름 속성을Animal.prototype
, 말이 출력됩니다.두 번째 로그 출력
this.name
,그this
키워드는 Tom 객체 자체를 나타냅니다.세 번째 로그는 다음 명령어를 사용하여 기록됩니다.
move
Animal base 클래스의 메서드.이 메서드는 구문을 사용하여 Hors 클래스 이동 메서드에서 호출됩니다.super.move(45);
. 사용방법super
이 컨텍스트의 키워드는,move
방법은 동물 프로토타입에 있는 프로토타입 체인에서 찾을 수 있습니다.
TS는 여전히 후드 밑의 프로토타입을 사용합니다.class
그리고.extends
키워드는 단지 원형적 유전보다 통사적인 설탕일 뿐입니다.
언급URL : https://stackoverflow.com/questions/13121431/accessing-member-of-base-class
'source' 카테고리의 다른 글
Jest를 사용한 테스트용 공유 유틸리티 함수 (0) | 2023.03.05 |
---|---|
부트스트랩4에서 Navbar 요소를 균등하게 띄우는 방법 (0) | 2023.03.05 |
Create-react-app - 플러그인 "react"의 오류 ".eslintrc.json"과 "BaseConfig" 간에 충돌했습니다. (0) | 2023.03.05 |
게시 오류:상대 경로가 동일한 여러 게시 출력 파일을 찾았습니다. (0) | 2023.03.05 |
ng-repeat 및 nested 루프가 있는 행 추가 (0) | 2023.03.05 |