>  기사  >  웹 프론트엔드  >  자바스크립트 우버가 뭐야?

자바스크립트 우버가 뭐야?

藏色散人
藏色散人원래의
2021-11-01 15:31:481539검색

javascript uber는 초기 javascript에서 특정 메소드가 상위 클래스를 호출하도록 하기 위해 사용된 메소드입니다. uber 메소드는 Java의 super와 유사합니다.

자바스크립트 우버가 뭐야?

이 기사의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, DELL G3 컴퓨터.

Javascript uber란 무엇인가요?

초기 JavaScript에서 uber 메소드는 메소드가 상위 클래스의 메소드를 호출할 수 있도록 하는 Java의 super와 유사합니다. Douglas Crockford는 예약어와의 충돌을 피하기 위해 super와 유사한 의미를 갖는 독일어 "über"를 사용했습니다.

그러나 Crockford는 super의 아이디어가 클래식 디자인 패턴에서는 매우 중요하지만 JavaScript의 프로토타입 및 기능 디자인 패턴에서는 불필요해 보인다고 말했습니다. JavaScript의 고전적 상속 고전 객체지향 언어는 일반적으로 부모 클래스(슈퍼 클래스)에 접근하기 위한 특별한 구문을 가지고 있기 때문에 하위 클래스의 메서드는 부모 클래스의 메서드를 사용할 수 있고, 하위 클래스와 부모 클래스의 메서드를 사용할 수 있습니다. 클래스의 이름이 동일합니다. 현대 JavaScript에는 Uber가 이 기능을 구현할 수 있는 특별한 구문이 없지만 더 번거롭습니다. 다음 예를 살펴보세요.

// inheritance helper
function extend(Child, Parent) {
  var F = function () {};
  F.prototype = Parent.prototype;
  Child.prototype = new F();
  Child.prototype.constructor = Child;
  Child.uber = Parent.prototype;
}
// define -> augment
function Shape() {}
Shape.prototype.name = 'Shape';
Shape.prototype.toString = function () {
  return this.constructor.uber
  ? this.constructor.uber.toString() + ', ' + this.name
  : this.name;
};
// define -> inherit -> augment
function TwoDShape() {}
extend(TwoDShape, Shape);
TwoDShape.prototype.name = '2D shape';
// define
function Triangle(side, height) {
  this.side = side;
  this.height = height;
}
// inherit
extend(Triangle, TwoDShape);
// augment
Triangle.prototype.name = 'Triangle';
Triangle.prototype.getArea = function () {
  return this.side * this.height / 2;
};

콘솔에 입력:

var my = new Triangle(5, 10);
my.toString();

출력: "Shape, 2D Shape, Triangle"

파생된 수준은 Shape -> TwoDShape -> Triangle

확장 기능은 상속됩니다. 코드가 캡슐화되어 있습니다.

임시 생성자 F()의 역할: 하위 클래스의 속성이 변경되더라도 상위 클래스의 속성은 변경되지 않습니다.

uber 속성: 상위 클래스 프로토타입을 가리킵니다.

toString() 메서드에서 생성자의 상위 클래스 프로토타입이 존재하는지 확인합니다. 존재하는 경우 해당 toString() 메서드를 호출하여 하위 클래스에서 상위 클래스 메서드 호출을 실현합니다.

추천 학습: "JavaScript 기본 튜토리얼"

위 내용은 자바스크립트 우버가 뭐야?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.