Javascript의 상속-자식 메서드에서 부모 메서드 호출

v1shnu

Javascript에서 프로토 타입 상속을 배우고 있으며 자식 메서드의 프로토 타입에서 부모 메서드를 호출하는 예제를 작성하려고했습니다. 그러나 기대했던 결과를 얻지 못했습니다.

Person.js

function Person(name, age) {
    this.name = name;
    this.age = age;
}


Person.prototype.greeting = function() {
    console.log("Hello, My name is " + this.name + " and I am " + this.age + " years old.")
}

module.exports = Person;

Employee.js

var Person = require('./Person');

var Employee = function(name, age, salary) {
    Person.call(this, name, age);
    this.salary = salary;
}

Employee.prototype = Object.create(Person.prototype);

Employee.prototype.greeting = function() {
    Person.prototype.greeting.call(this);
    console.log("My salary is " + this.salary)
}

module.exports = Employee;

Test.js

var Person = require('./Person');
var Employee = require('./Employee');

var p = new Person("Rob", 24);

p.greeting();

var e = new Employee("Jim", 25, 1200000);

e.greeting();

그래서 기본적으로 내가 가진 무엇이며 Person이 클래스 nameagegreeting일부 데이터를 인쇄 프로토 타입에 부착 방법. Employee클래스는 Person을 확장하고 추가 속성을 가지고 salary있습니다. 또한 greeting급여를 인쇄하여 방법을 재정의합니다 . 그러나를 인쇄하기 전에 인사말 방법을 salary호출 super class'한 다음 salary.

내 예상 출력은 다음과 같습니다.

Hello, My name is Rob and I am 24 years old.
Hello, My name is Jim and I am 25 years old.
My salary is 1200000

그러나 실제 출력은 다음과 같습니다.

Hello, My name is Rob and I am 24 years old.
Hello, My name is Person and I am 25 years old.
My salary is 1200000

call () 메서드는 context와 함께 인수를 전달해야 한다는 것을 알고 있습니다 this. 그리고 this (Person)내부에서 메서드를 호출하기 때문에 클래스가 순수하게 상속되지 않는다는 것을 나타내는 이름으로 대체되는 이름입니다. 나는 super.methodName()내부 에서 사용할 수 있어야 하지만 슈퍼는 여기서 작동하지 않습니다.

내가 한 것이 JS의 상속이 어떻게 이루어 졌는지 또는 내가 잘못하고 있는지 알려주십시오.

추신 : 나는 자바에서와 같이 인사에 대한 슈퍼 호출을 사용하려고했지만 오류가 발생했습니다. Employee 클래스가 Person 클래스를 확장하지 않았 음을 의미합니까?

마젤 린
Employee.prototype = Object.create(Person)

기능에 할당 Employee.prototype됩니다 Person. 함수에는 name속성 이 있으므로 특정 함수의 이름을 기록했습니다 : Person.

Employee예는 특성도 찾아보실 수 있습니다 3 개의 수영장이있다 :

첫 번째는 3 개의 속성이있는 Employee 인스턴스입니다.

  1. 이름
  2. 나이
  3. 봉급

두 번째는 1 개의 메소드가있는 Employee 프로토 타입 (prop가 Employee 인스턴스에 없으면 js가 여기에 표시됨)입니다.

  1. 인사

세 번째는 하나의 메소드가있는 Person 프로토 타입 (prop가 이전 객체에서 발견되지 않은 경우 js가 여기를 참조)입니다.

  1. 인사

greeting가 on Employee.prototype이므로 Employee 인스턴스에서 Person.prototype액세스 할 수 없습니다. Person.prototype.greeting항상 Employee.prototype.greeting체인에서 더 가까운 곳에 의해 차단됩니다 . 그 이유는 다음과 같습니다.

Employee.prototype.greeting = function() {
    Person.prototype.greeting.call(this);
    console.log("My salary is " + this.salary)
}

Person.prototype.greeting직접 호출해야합니다 ( this함수 내부에는 Employee의 인스턴스가 있음)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

자바 스크립트 상속 : 부모의 메서드 호출

분류에서Dev

상속-부모 대신 자식 메서드 호출

분류에서Dev

ReactJS의 자식에서 부모 클래스 메서드 호출

분류에서Dev

Rust 상속 : 부모 메서드 호출

분류에서Dev

C ++ 상속에서 부모에서 자식 메서드를 호출하는 가장 좋은 방법

분류에서Dev

부모에서 기능 구성 요소의 자식 메서드 호출

분류에서Dev

자식 컨트롤러에서 부모 컨트롤러의 메서드 호출

분류에서Dev

PHP에서 부모 메서드를 다시 호출하지 않고 부모 클래스의 속성 상속

분류에서Dev

상속 클래스에서 모듈 정의 메서드에서 super 호출

분류에서Dev

자식 생성자에서 부모 메서드 호출

분류에서Dev

부모 메서드에서 파이썬 호출 자식 메서드

분류에서Dev

jQueryUI + jQtree, 중첩 목록의 메서드 호출은 부모 및 자식 메서드를 호출합니다.

분류에서Dev

자식 클래스에서 부모 메서드 호출

분류에서Dev

JavaScript에서 해당 메서드 내부의 메서드 호출

분류에서Dev

C ++ 구현 된 순수 가상 메서드의 부모 추상 클래스에서 검사 메서드를 자동으로 호출합니까?

분류에서Dev

C #의 부모 클래스 메서드에서 자식 클래스의 필드를 호출하는 방법

분류에서Dev

Javascript-프로토 타입 메서드 내부에서 자식 메서드 호출

분류에서Dev

자식 메서드에서 부모 속성에 대한 Javascript 액세스

분류에서Dev

EmberJS에서 부모로부터 자식 컴포넌트의 메서드를 호출하는 방법

분류에서Dev

Ruby의 부모 클래스에서 포함 된 모듈 메서드를 상속하는 자식 클래스

분류에서Dev

부모 클래스 생성자가 호출 한 메서드의 자식 클래스 필드에 액세스

분류에서Dev

부모의 메서드에서 자식의 상속 된 멤버에 액세스하는 방법

분류에서Dev

React가 호출되지 않는 자식 클래스의 부모 메서드

분류에서Dev

자식에서 추상 메서드를 호출 할 때 부모 변수 채우기

분류에서Dev

ReactJS 부모의 onClick 메서드에서 자식 구성 요소에 대한 ajax 호출 업데이트

분류에서Dev

활동에서 부모 조각의 자식 조각에있는 메서드 호출

분류에서Dev

React의 부모 구성 요소에서 자식 구성 요소의 메서드를 호출하는 방법

분류에서Dev

메서드가 부모의 프로토 타입에 속하지 않을 때 자식에서 부모의 메서드를 호출하는 방법이 있습니까?

분류에서Dev

파이썬의 부분 메서드 상속 / 장식 자

Related 관련 기사

  1. 1

    자바 스크립트 상속 : 부모의 메서드 호출

  2. 2

    상속-부모 대신 자식 메서드 호출

  3. 3

    ReactJS의 자식에서 부모 클래스 메서드 호출

  4. 4

    Rust 상속 : 부모 메서드 호출

  5. 5

    C ++ 상속에서 부모에서 자식 메서드를 호출하는 가장 좋은 방법

  6. 6

    부모에서 기능 구성 요소의 자식 메서드 호출

  7. 7

    자식 컨트롤러에서 부모 컨트롤러의 메서드 호출

  8. 8

    PHP에서 부모 메서드를 다시 호출하지 않고 부모 클래스의 속성 상속

  9. 9

    상속 클래스에서 모듈 정의 메서드에서 super 호출

  10. 10

    자식 생성자에서 부모 메서드 호출

  11. 11

    부모 메서드에서 파이썬 호출 자식 메서드

  12. 12

    jQueryUI + jQtree, 중첩 목록의 메서드 호출은 부모 및 자식 메서드를 호출합니다.

  13. 13

    자식 클래스에서 부모 메서드 호출

  14. 14

    JavaScript에서 해당 메서드 내부의 메서드 호출

  15. 15

    C ++ 구현 된 순수 가상 메서드의 부모 추상 클래스에서 검사 메서드를 자동으로 호출합니까?

  16. 16

    C #의 부모 클래스 메서드에서 자식 클래스의 필드를 호출하는 방법

  17. 17

    Javascript-프로토 타입 메서드 내부에서 자식 메서드 호출

  18. 18

    자식 메서드에서 부모 속성에 대한 Javascript 액세스

  19. 19

    EmberJS에서 부모로부터 자식 컴포넌트의 메서드를 호출하는 방법

  20. 20

    Ruby의 부모 클래스에서 포함 된 모듈 메서드를 상속하는 자식 클래스

  21. 21

    부모 클래스 생성자가 호출 한 메서드의 자식 클래스 필드에 액세스

  22. 22

    부모의 메서드에서 자식의 상속 된 멤버에 액세스하는 방법

  23. 23

    React가 호출되지 않는 자식 클래스의 부모 메서드

  24. 24

    자식에서 추상 메서드를 호출 할 때 부모 변수 채우기

  25. 25

    ReactJS 부모의 onClick 메서드에서 자식 구성 요소에 대한 ajax 호출 업데이트

  26. 26

    활동에서 부모 조각의 자식 조각에있는 메서드 호출

  27. 27

    React의 부모 구성 요소에서 자식 구성 요소의 메서드를 호출하는 방법

  28. 28

    메서드가 부모의 프로토 타입에 속하지 않을 때 자식에서 부모의 메서드를 호출하는 방법이 있습니까?

  29. 29

    파이썬의 부분 메서드 상속 / 장식 자

뜨겁다태그

보관