문제

예를 들어 PHP에서

class foo{
  function foo($name){ //constructor
    $this->name=$name;
  }
  function sayMyName(){
     return $this->name;
  }
}
class bar extends foo{
  function sayMyName(){
     return "subclassed ".$this->name;
  }
}

그리고 JS에서

function foo(name){
  this.name=name;
}
foo.prototype.sayMyName=function(){return this.name};

function bar(){}

bar.prototype=new foo();
bar.prototype.sayMyName=function(){return "subclassed "+this.name};

나는 JavaScript를 처음 사용합니다. 그래서 저를 깨달으십시오. 기능적으로 동일하지 않습니까, 아니면 거대한 것을 놓치고 있습니까?
그들이 동일하다면, 고전적은 프로토 타입과 어떻게 다릅니 까?

미리 감사드립니다 ...

도움이 되었습니까?

해결책

JavaScript에서는 프로그램이 실행될 때 상속을 변경할 수 있습니다. 클래식 프로그래밍에서는 할 수 없습니다. 예를 들어:

function foo(name){
  this.name=name;
}
foo.prototype.sayMyName=function(){return this.name};

function foo2(name){
  this.name = name;
}
foo2.prototype.sayMyName = function(){return "My name is "+this.name;};

function bar(){}

bar.prototype = new foo();
var myBar = new bar();
myBar.name = "Marius";
alert(myBar.sayMyName());

bar.prototype = new foo2();
var myBar2 = new bar();
myBar2.name = "Marius";
alert(myBar2.sayMyName());

다른 팁

JavaScript (올바르게 지적한대로)는 특정 유형의 OOP를 사용합니다. 프로토 타입 기반. JavaScript에서는 클래스를 생성하지 않으므로 기존 객체를 복제하고 프로토 타입에 멤버를 추가하여 증강합니다.

PHP에서는 새로운 객체에 대한 청사진 인 클래스를 생성합니다.

나는 Andrew Hare와 Marius를 보증합니다. 수업이 런타임에 수정하여 클래스가 할 수있는 일을 바꿀 수 있다는 것입니다. 클래식 OOP는 그렇게 할 수 없으며, 클래스/객체가 수행 할 수있는 일과 컴파일 전 또는 해석되기 전에 (해석 된 언어 인 경우) 정확히 어떤 데이터 속성을 지정해야합니다 (해석 된 언어).

제공 한 코드는 기능적으로 동일하지만 JS의 프로토 타입을 활용하지 않았기 때문입니다.

수업 기반 상속

  • 클래스와 인스턴스는 별개의 엔티티입니다.
  • 클래스 정의로 클래스를 정의합니다. 생성자 방법으로 클래스를 인스턴스화합니다.
  • 새 연산자와 함께 단일 객체를 만듭니다.
  • 구성 클래스 정의를 사용하여 객체 계층 기존 클래스의 서브 클래스를 정의합니다.
  • 다음으로 속성을 상속합니다 클래스 체인.
  • 클래스 정의는 클래스의 모든 인스턴스의 모든 속성을 지정합니다. 실행 시간에 동적으로 속성을 추가 할 수 없습니다.

프로토 타입 기반 상속

  • 모두 객체는 인스턴스입니다.
  • 생성자 함수로 객체 세트를 정의하고 만듭니다..
  • 새 연산자와 함께 단일 객체를 만듭니다.
  • 건설하다 객체를 프로토 타입으로 할당하여 객체 계층 생성자 함수와 관련이 있습니다.
  • 다음으로 속성을 상속합니다 프로토 타입 체인.
  • 생성자 함수 또는 프로토 타입 초기 속성 세트를 지정합니다. 속성을 동적으로 추가하거나 제거 할 수 있습니다 개별 객체 또는 전체 객체 세트에.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top