javascript 특징의: 계승

9254 단어 JS
계승 은 코드 재 활용 을 해결 하여 프로 그래 밍 을 인간 의 사고 에 더욱 가 깝 게 할 수 있다.여러 종류 에 같은 속성 (변수) 과 방법 이 존재 할 때 이런 종류 에서 부 류 를 추상 화 할 수 있다. 부 류 에서 이런 같은 속성 과 방법 을 정의 할 수 있다. 모든 자 류 는 이러한 속성 과 방법 을 다시 정의 할 필요 가 없고 부 류 의 속성 과 방법 을 계승 하기 만 하면 된다.JS 에서 상속 을 실현 하 는 방식.
1. 대상 사칭
<html>
  <head>
    <script type="text/javascript">
      //       
      function Stu(name, age){
        this.name = name;
        this.age = age;
        this.show = function(){
          window.alert(this.name + " " + this.age);
        }
      }

      //   
      function MidStu(name, age) {
        this.stu = Stu;
        //             
        //                    ,  js            ,  MidStu   Stu    
        this.stu(name, age);
        //    
        this.show_mid = function(){
          window.alert("     " + this.name);
        }

        //    
        this.payFee = function(){
          window.alert("  " + money * 0.8);
        }
      }

      //   
      function Pupil(name, age) {
        this.stu = Stu;
        //             
        this.stu(name, age);

        //    
        this.payFee = function(){
          window.alert("  " + money * 0.5);
        }
      }

      //       
      var midStu = new MidStu("zs", 13);
      midStu.show(); //zs  13
      midStu.show_mid(); //     zs
      var pupil = new Pupil("ls", 10); //ls 10
      pupil.show();
    script>
  head>
  <body>
  body>
html>

둘째, call 또는 apply 를 통 해 첫 번 째 방법 을 실현 하 는 것 도 가장 간단 한 방법 입 니 다. call 또는 apply 방법 을 사용 하여 부모 대상 의 구조 함 수 를 하위 대상 에 연결 합 니 다. 즉, 하위 대상 구조 함수 에 한 줄 을 추가 합 니 다.
function Animal(){
    this.species = "  ";

  }

function Cat(name,color){
      Animal.apply(this, arguments);
    this.name = name;
    this.color = color;

  }

3. prototype 모드
'고양이' 의 prototype 대상 이 하나의 Animal 인 스 턴 스 를 가리 키 면 모든 '고양이' 의 인 스 턴 스 는 Animal 을 계승 할 수 있 습 니 다.
  Cat.prototype = new Animal();  //       ,   Cat prototype      Animal   。

  Cat.prototype.constructor = Cat;
  //   ,    prototype      constructor  ,        。    "Cat.prototype = new Animal();"   ,Cat.prototype.constructor   Cat ;       ,Cat.prototype.constructor  Animal。
  var cat1 = new Cat("  ","  ");

  alert(cat1.species); //   

Animal 대상 에서 변 하지 않 는 속성 은 Animal. prototype 에 직접 기록 할 수 있 습 니 다.그래서 우 리 는 Cat () 이 Animal () 을 뛰 어 넘 고 Animal. prototype 을 직접 계승 할 수 있다.이제 우 리 는 먼저 Animal 대상 을 고 쳐 씁 니 다.
 function Animal(){ }
  Animal.prototype.species = "  ";
  , Cat prototype  ,    Animal prototype  ,        。
  Cat.prototype = Animal.prototype;
  Cat.prototype.constructor = Cat;
  var cat1 = new Cat("  ","  ");
  alert(cat1.species); //   

이전 방법 에 비해 이렇게 하 는 장점 은 효율 이 비교적 높다 는 것 이다.단점 은 Cat. prototype 과 Animal. prototype 이 현재 같은 대상 을 가리 키 고 있다 는 것 이다. 그러면 Cat. prototype 에 대한 수정 은 Animal. prototype 에 반 영 될 것 이다.
4. 빈 대상 을 중개 로 하 는 것 은 'prototype 을 직접 계승 하 는 것' 이 상기 한 단점 이 있 기 때문에 네 번 째 방법 으로 빈 대상 을 중개 로 한다.
var F = function(){};
  F.prototype = Animal.prototype;
  Cat.prototype = new F();
  Cat.prototype.constructor = Cat;

면 은 prototype 대상 을 사용 하여 계승 을 실현 합 니 다.우리 도 하나의 사고방식 을 바 꾸 어 순 전 히 '복사' 방법 으로 계승 을 실현 할 수 있다.쉽게 말 하면 부모 대상 의 모든 속성 과 방법 을 하위 대상 에 복사 하면 계승 이 가능 하지 않 습 니까?이렇게 해서 우 리 는 다섯 번 째 방법 이 생 겼 다.우선, Animal 의 모든 변 하지 않 는 속성 을 prototype 대상 에 올 려 놓 습 니 다.  
function Animal(){}
  Animal.prototype.species = "  ";
  ,      ,         。
  function extend2(Child, Parent) {
    var p = Parent.prototype;
    var c = Child.prototype;
    for (var i in p) {
      c[i] = p[i];
      }
    c.uber = p;
  }

이 함수 의 역할 은 부모 대상 의 prototype 대상 의 속성 을 Child 대상 의 prototype 대상 에 일일이 복사 하 는 것 입 니 다.사용 할 때 이렇게 쓰 세 요:
  extend2(Cat, Animal);
  var cat1 = new Cat("  ","  ");
  alert(cat1.species); //   

거울 점

좋은 웹페이지 즐겨찾기