나는 JavaScript가 객체 지향 언어인지 또는 객체 지향 언어인지에 대한 모든 사람들이 자신의 의견을 가지고 있다고 생각합니다. JavaScript의 충실한 팬들은 JavaScript가 객체 지향 언어라고 말해야합니다. 예를 들어, "JavaScript의 왕의 귀환"에서 JavaScript에 대한 진술은 프로토 타입 객체 지향을 기반으로합니다. 내 개인적인 의견에 대해 이야기하겠습니다. 상속, 다형성 및 캡슐화의 세 가지 객체 지향적 특징. JavaScript는 Java 및 C#과 같은 객체 지향 언어만큼 빠르지 않지만 결국 특정 지원이 있습니다. 따라서 JavaScript는 객체 지향 언어이지만 상속 부분에서 일련의 상속 방법이 있지만 각 상속 방법은 진정으로 객체 지향 언어의 힘을 실현할 수 없습니다. 따라서 객체 지향적이라고 말하는 것은 훨씬 많이 가져옵니다. 요약하면, JavaScript에 대한 나의 이해는 그것을 단순화 된 객체 지향 또는 "의사"객체 지향이라고 부릅니다 (이 의사 단어는 경멸적인 의미가 없습니다).
오늘, 객체 지향의 첫 번째 특징 인 상속에 대해 이야기합시다.
상속은 무엇입니까? 나는 이것에 대해 말도 안되는 이야기를하고 싶지 않습니다. 동물, 사람, 소녀가 있습니다. 이것은 가장 단순하고 전형적인 상속 체인입니다.
C#과 같은 객체 지향에서는 쉽습니다.
코드 사본은 다음과 같습니다.
계급 동물
{}
계급 사람 : 동물
{}
클래스 소녀 : 사람들
{}
따라서 JavaScript에는 구현을 제공 할 클래스 나 상속이 없습니다. 어떻게해야합니까?
개체 변장 (건축 상속 방법)
물체 위장은 무엇입니까? 우리가 구성 상속이라고 부르는 것은 이해하기 쉽습니다. 이름에서 알 수 있듯이 생성자를 사용하여 상속을 사용하는 것입니다. 실제로, 이는 부모 클래스 생성자가 일반적인 방법으로 간주되어 하위 클래스 생성자에 넣어 실행한다는 것을 의미합니다. 이런 식으로 객체를 구성 할 때 서브 클래스 객체는 물론 상위 클래스 방법을 구성 할 수 있습니다!
위의 예를 사용해 보겠습니다. 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
기능 동물 ()
{
this.run = function () {alert ( "i can run");};
}
기능인 (이름)
{
// 여기서, 부모 클래스의 구성 방법이 전달되고, 그런 다음 상위 클래스의 구성 방법이 실행됩니다. 현재 부모 클래스의 메소드를 사용할 수 있습니다.
this.father = 동물;
this.father ();
// 삭제해야합니다. 그렇지 않으면 서브 클래스가 부모 클래스와 동일한 이름의 메소드에 추가되면 상위 클래스로 수정됩니다.
이것을 삭제하십시오.
this.name = 이름;
this.say = function () {alert ( "내 이름은"+this.name);}
}
기능 소녀 (이름, 나이)
{
this.father = 사람들;
this.father (이름);
이것을 삭제하십시오.
this.age = age;
this.introading = function () {alert ( "내 이름은"+this.name+"입니다. 나는"+this.age);};
}
이러한 방식으로 상속 체인이 구현되고 테스트는 다음과 같습니다.
코드 사본은 다음과 같습니다.
var a = 새로운 동물 ();
a.run ();
var p = 새로운 사람들 ( "windking");
p.run ();
p.say ();
var g = New Girl ( "Xuan", 22);
g.run ();
g.say ();
g.introctor ();
결과는 다음과 같습니다.
에이.
비.
기음.
디.
이자형.
에프.
테스트가 성공했습니다!
이 코드의 키를 요약하고, 상위 클래스를 지정하고, 상위 클래스 객체를 선언 한 다음, 임시 변수를 삭제해 봅시다. 당신은 그것이 조금 번거 롭다고 생각합니까? 적어도 그게 제가 생각하는 것입니다. 삭제를 잊어 버린 후에는 부모 클래스가 수정 될 위험이 있어야합니다. 이를 위해 우리는 전화를 사용하고이를 개선하기 위해 적용합니다!
코드와 위의 예를 살펴 보겠습니다 (모든 사람이 이해하기 쉽고 변경해야 할 필요성, 동물 이름이 있습니다).
코드 사본은 다음과 같습니다.
기능 동물 (이름)
{
this.run = function () {alert ( "i can run");};
}
기능인 (이름)
{
// 호출 방법을 사용하여 상속을 구현합니다
this.father = 동물;
this.father.call (this, name);
this.name = 이름;
this.sayname = function () {alert ( "내 이름은"+this.name;);};
}
기능 소녀 (이름, 나이)
{
// 적용 메소드를 사용하여 상속을 구현하십시오
this.father = 사람들;
this.father.apply (this, new Array (이름));
this.age = age;
this.introading = function () {alert ( "내 이름은"+this.name+"입니다. 나는"+this.age);};
}
동일한 테스트 코드를 사용하여 테스트가 성공한 것으로 나타났습니다.
당신이 초보자라면 아래 두 코드를 볼 때 약간 어지러움을 느낄 수 있습니다. 전화 란 무엇이며 적용되는 것은 무엇입니까? 좋아, Wanzhuan 상속의 특별한 주제에서 나는 보충 문제 시리즈를 추가했습니다. 이것을 이해하지 못하면 내 기사 : "Wanzhuan의 단어 : 전화 및 적용"을 읽을 수 있습니다.
물체 변장은 상속을 구현하는 방법 일뿐입니다. 다음 기사에서는 다른 상속 방법과 여러 상속 방법의 장점과 단점에 대해 계속 쓸 것입니다. 계속주의를 기울여 오신 것을 환영합니다.