js 대상의 계승

3342 단어

js 계승의 실현 방식

// 
function Animal(name){
    // 
    this.name=name;
    this.sleep=function(){
        console.log(this.name+" ");
  }
}
// 
Animal.prototype.eat=function(food){
    console.log(this.name+" "+food);
}

원형 체인 계승


부류의 실례를 자류의 원형으로 하고 자류의 원형 체인에 부류의 실례를 구축한다.
function Cat(){
}
Cat.prototype=new Animal();
Cat.prototype.name='cat';
var cat=new Cat();
console.log(cat.name);
console.log(cat.eat('fish'));
console.log(cat.sleep());
console.log(cat instanceof Animal);//true
console.log(cat instanceof Cat);//true
console.log(Cat instanceof Animal);//false

특징: 1.매우 순수한 계승 관계로 실례는 자류의 실례이자 부류의 실례이다.2. 부류에 추가된 원형 방법과 원형 속성, 자류는 모두 접근할 수 있다.3. 단점을 쉽게 실현할 수 있다: 1.하위 클래스에 속성과 방법을 추가하려면 new Animal () 같은 문장 뒤에 실행해야 하며 구조기에 넣을 수 없습니다.2. 다계승이 불가능하다.3. 원형 대상의 인용 속성은 모든 실례가 공유하는 4.하위 클래스 실례를 만들 때 상위 클래스 구조 함수처럼 전참할 수 없습니다.실례는 구축할 때 하위 클래스에 전참할 수 없습니다.

구조 계승


부류의 구조 함수를 사용하여 자류 실례를 강화하는 것은 부류의 실례 속성을 자류에 복제하는 것과 같다(원형에 사용되지 않음)
function Cat(name){
  Animal.call(this);
  this.name=name;
}
var cat=new Cat();
console.log(cat.name);
console.log(cat.sleep())
console.log(cat instanceof Animal);//false
console.log(cat instanceof Cat);//true

특징: 1.하위 클래스 실례가 상위 클래스 인용 속성을 공유하는 문제를 해결했습니다. 2.하위 클래스 실례를 만들 때 상위 클래스에 매개 변수를 전달할 수 있습니다. 3.다중 계승 (call 여러 상위 대상) 가능 단점: 1.인스턴스는 상위 클래스의 인스턴스가 아니라 하위 클래스의 인스턴스입니다. 2.부류의 실례 속성과 방법만 계승할 수 있고 원형 속성과 방법은 계승할 수 없다.함수 복용을 실현할 수 없습니다. 모든 하위 클래스는 부류 실례 함수의 복사본이 있어 성능에 영향을 줍니다

인스턴스 상속


상위 인스턴스에 새 특성을 추가하여 하위 인스턴스로 반환
function Cat(name){
  var instance=new Animal();
  instance.name=name;
  return instance;
}
var cat=new Cat();
console.log(cat.name)
console.log(cat.sleep())
console.log(cat instanceof Animal)
console.log(cat instanceof Cat)

특징: 1.호출 방식을 제한하지 않습니다. new 하위 클래스 () 든 하위 클래스 () 든 되돌아오는 대상은 모두 같은 효과 단점을 가지고 있습니다. 1.인스턴스는 상위 클래스의 인스턴스이지 하위 클래스의 인스턴스가 아닙니다. 2.다중 상속은 지원되지 않음

복제 상속

function Cat(name){
  var animal=new Animal();
  for(var p in animal){
    Cat.prototype[p]=animal[p]
}
  Cat.prototype.name=name;
}
var cat=new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // false
console.log(cat instanceof Cat); // true

특징: 1.다중 계승 단점 지원: 1.낮은 효율 2.부류의 일일이 들 수 없는 방법을 얻을 수 없습니다

조합 상속


부류 구조를 호출하여 부류의 속성을 계승하고 전참의 장점을 보존한 다음에 부류 실례를 부류 원형으로 삼아 함수 복용을 실현한다
function Cat(name){
  Animal.call(this);
  this.name=name;
}
Cat.prototype=new Animal();
var cat=new Cat();
console.log(cat.name);
console.log(cat.sleep())
console.log(cat instanceof Animal);//true
console.log(cat instanceof Cat);//true

특징: 1.실례의 속성과 방법을 계승할 수도 있고, 원형의 속성과 방법을 계승할 수도 있다.상위 클래스의 인스턴스이자 하위 클래스의 인스턴스입니다.인용 속성 공유 문제가 없습니다. 4.전삼 가능5.함수 복용 가능 단점: 부류의 구조 함수를 두 번 호출했습니다

기생 조합 계승

function Cat(name){
  Aniaml.call(this);
  this.name=name;
}
(function(){
  var Super=function(){};
  Super.prototype=Animal.prototype;
  Cat.prototype=new Super()
})()
// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // true
console.log(cat instanceof Cat); //true

특징: 완벽!!

좋은 웹페이지 즐겨찾기