>  기사  >  웹 프론트엔드  >  javascript 객체지향 프로그래밍의 기초 다형성_js 객체지향

javascript 객체지향 프로그래밍의 기초 다형성_js 객체지향

WBOY
WBOY원래의
2016-05-16 18:47:461051검색

Javascript는 이미 객체 지향 캡슐화 및 상속 기능을 시뮬레이션할 수 있지만 불행히도 다형성 기능에 대한 Javascript의 지원은 매우 약합니다! 다른 객체지향 언어의 다형성은 일반적으로 메소드 오버로딩을 통해 이루어지며, 자바스크립트도 이 두 가지 메소드를 통해 다형성을 구현합니다!

오버로딩: Javascript는 약한 유형의 언어이고 가변 매개변수를 지원하므로 오버로드된 메소드를 정의할 때 인터프리터는 매개변수 유형과 매개변수 수를 통해 서로 다른 오버로드된 메소드를 구별할 수 없으므로 메소드 오버로딩이 지원되지 않습니다. 같은 이름의 메소드가 연속적으로 정의되면 나중에 정의된 메소드가 먼저 정의된 메소드를 덮어씁니다!

통역사는 오버로드된 메소드를 구분할 수 없으므로 수동으로 서로 다른 메소드를 구분합니다.

코드 복사 코드는 다음과 같습니다.

var MyClass=function(){
var AddNum=function(a,b){
return a b;
}
var AddString=function(a ,b ){
return "나는 여기 있습니다" a b;
}
this.Add=function(a,b){
if(typeof(a)=="number")
return AddNum(a,b);
else
return AddString(a,b);
}
}
var MyObj = new MyClass()
var X = MyObj .Add (5,6); var Y = MyObj.Add("A","FFFFFF");
alert(X); //결과: 11
alert(Y); 나왔어요AFFFFFF

가상방식 :

코드복사 코드는 다음과 같습니다
function BaseClass(){
this.Hello=function(){
return this.Say()
}
}
function MyClassA(){
this.Say=function(){
return "안녕하세요";
}
}
function MyClassB(){
this.Say=function(){
return "This is MyClassB";
}
}
MyClassA.prototype = new BaseClass();
MyClassB.prototype = new BaseClass();
var ObjA = new MyClassA();
var XX = ObjA.Hello();
alert(XX); //결과: Hello
var ObjB = new MyClassB()
var YY = ObjB.Hello(); YY 가상 방법과 동일하며 다형성을 시뮬레이션할 수 있습니다!


코드 복사
코드는 다음과 같습니다.

/ / 함수의 인수 속성을 통해 오버로딩 구현 function add() { var sum = 0 for ( var i = 0; i < 인수.길이; i ) { sum = 인수[i]; } return sum;
}
function test() {
alert(add()); 1 , 2 ));
alert(add( 1 , 2 , 3 ));
}


코드를 통해 결과를 실행하여 다중 매개변수 추가의 오버로드를 실현합니다. 기능. 물론, 인스턴스 오브(instanceof) 또는 생성자를 사용하여 함수의 각 매개변수 유형을 결정하여 나중에 수행할 작업을 결정하고 더 복잡한 함수 또는 메서드 오버로드를 구현할 수도 있습니다. 즉, JavaScript 오버로딩은 사용자가 직접 인수 속성을 조작하여 함수에서 구현합니다. 인수의 특성에 대해서는 이전에 내 기사(http://blog.csdn.net/zhanglingdll_39/archive/2009/08/20/4465670.aspx)를 참조하십시오.
다음은 js 재작성 구현을 이해하는 데 중점을 둡니다.
// 클래스에 정적 메서드 상속을 추가한다는 것은 특정 클래스에서 상속한다는 의미입니다.
Function.prototype.inherit = function(baseClass) {
for ( var p in baseClass.prototype) {
this .prototype[p] = baseClass.prototype[p];
}
}
// js 구현 재작성
function parentClass() { // 상위 클래스
}
parentClass.prototype.method = function () {
alert( " parentClass 메서드 " )
}
function subClass() { // 하위 클래스
}
//



코드 복사


코드는 다음과 같습니다.

다음 문장은 subClass.prototype = new parentClass();
subClass.inherit(parentClass);
// subClass.prototype.method = function() { // 하위 클래스 재작성 상위 클래스의 메서드 - 주석을 제거하고 실행해 보세요.
// Alert("subClass method")
// }
function test() {
var obj = new subClass( ) ;
obj.method();
}
이런 방식으로 하위 클래스에 정의된 메서드는 상위 클래스에서 상속된 메서드를 재정의합니다. 하위 클래스에서 상위 클래스의 메서드를 호출하는 방법이 궁금할 수 있습니다. 자, 다음과 같이 구현을 살펴보겠습니다.
// 클래스에 정적 메서드 상속을 추가한다는 것은 특정 클래스에서 상속한다는 의미입니다.
Function.prototype.inherit = function (baseClass) {
for ( var p in baseClass.prototype) {
this .prototype[p] = baseClass.prototype[p];
}
}
/* 참고 기사: http://menjoy.javaeye.com/blog /127847 */
//js 구현은
function parentClass() {
this .method = function () {
alert( " parentClass method " );
}
}를 다시 작성합니다.
function subClass () {
var method = this .method;
this .method = function () {
method.call( this )
alert( " subClass method " );
}
}
subClass.prototype = new parentClass();
// subClass.inherit(parentClass) //이 문장은 이전 문장과 동일해 보입니다. subClass.prototype = new parentClass (); 그런데 실제로 그럴까요? ? ? ? (이전 줄을 주석 처리하고 이 줄을 실행하여 확인하세요.)
subClass.prototype.constructor = subClass;
function test() {
var obj = new subClass()
obj.method() ;
}

자, 다형성에 대한 소개는 여기까지입니다. JS 객체지향 프로그래밍은 마치 광대한 바다와 같습니다. 제가 다른 사람들의 글을 바탕으로 작성한 JS 객체지향 프로그래밍의 세 가지 기본 사항은 초보자가 배울 수 있는 참고용으로만 사용할 수 있습니다. 배움에는 끝이 없습니다. 인터넷에서 전문가들이 쓴 몇 가지 훌륭한 기사를 참조했습니다. 나는 내 기술의 천박함을 충분히 알고 있습니다. 이해의 단계를 뛰어넘은 독자들에게는 기술적인 내용을 읽는 것이 좋습니다. 정원 전문가가 작성한 기사. 먼저 정원 전문가들에게 감사의 말씀을 전하고 싶습니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.