JavaScript(03):대상 지향

7292 단어 JavaScript
대상 을 대상 으로 하 는 개발 방식 은 현재 소프트웨어 개발 의 주류 방식 이 고 자 바스 크 립 트 도 대상 사건 을 대상 으로 하 는 프로 그래 밍 언어 이다.자 바스 크 립 트 의 대상 을 대상 으로 프로 그래 밍 하 는 지식 을 습득 할 수 있다 면 자신의 자 바스 크 립 트 라 이브 러 리 를 구축 하 는 기초 와 전제 가 있다.
1.대상 을 향 한 기본 개념
자바 나 C\#를 잘 아 는 개발 자 에 게 대상 을 대상 으로 하 는 개념 과 패키지,계승,다 중 등 명 사 는 낯 설 지 않 을 것 이다.ECMAScript 는 정식 클래스 가 없습니다.대상 정 의 는 함수 인 구조 함수 에 저 장 됩 니 다.자 바스 크 립 트 에서 구조 함 수 는 일반 함수 에 비해 특별한 점 이 없습니다.
ECMAScript 에서 대상 은 특성(attribute)으로 구성 되 어 있 으 며,특성 은 원시 값 일 수도 있 고 인용 값 일 수도 있 으 며,특성 이 함수 로 저장 되 어 있 으 면 대상 으로 볼 수 있 는 방법(method),기타 대상 으로 볼 수 있 는 속성(property)입 니 다.
2.대상 의 생 성과 사용
대상 의 생 성과 폐 기 는 자 바스 크 립 트 실행 과정 에서 발생 합 니 다.대상 은 키워드 new 뒤 꿈 치 를 예화 할 클래스 이름 으로 만 들 었 습 니 다.
var obj = new Object();
var str = new String();

ECMAScript 는 쓰레기 수 거 메커니즘 을 정의 하 는데,이 는 전문 적 으로 대상 을 소각 하지 않 고 메모 리 를 방출 하지 않 아 도 된다 는 것 을 의미한다.한 대상 이 인용 되 지 않 으 면 해당 대상 은 폐지 되 고 쓰레기 수 거 기 는 작 동 하면 폐지 대상 이 폐기 된다.대상 의 인용 을 null 로 설정 하면 이 대상 을 폐지 할 수 있 습 니 다.오래된 브 라 우 저 에 대해 서 는 완전한 쓰레기 회수 메커니즘 이 없 기 때문에 대상 이 정확하게 소각 되 지 않 을 수 있 습 니 다.대상 과 그 모든 특성 을 폐지 하 는 것 이 메모리 사용 을 확보 하 는 가장 좋 은 방법 입 니 다.
3.대상 의 유형
  • 로 컬 대상:숙주 환경 에 독립 된 ECMAScript 가 제공 하 는 대상 입 니 다.포함:Object,Function,Array,String,Boolean,Number,Date,RegExp,Error 등.
    Array 클래스:
  • var x = new Array(); x[0] = "red"; x[1] = "blue"; x[2] = "green";
  • var y = new Array(20);
  • var z = new Array("red", "green", "blue");

  • 4.567917.배열 은 최대 4294967295(2 의 32 차방 감 1)를 보관 할 수 있 고 대부분 프로그램 설계 의 수 요 를 만족 시 킬 수 있다
  • 배열 은 length 속성,split(),slice(),concat()등 방법 을 가진다
  • ECMAScript 의 Array 류 는 매우 재 미 있 는 부분 은 배열 의 행 위 를 다른 데이터 형식의 행위 와 비슷 하 게 하 는 방법 을 제공 하 는 것 이다.예 를 들 어 Array 대상 을 스 택(stack)으로 사용 하고 push()와 pop()방법 으로 액세스 합 니 다.또한 shift()와 unshift()방법 을 통 해 배열 을 대기 열(quue)로 조작 할 수 있 습 니 다

  • 4.567917.배열 은 sort()방법 을 제공 하여 정렬 작업 을 할 수 있 고 reverse()방법 으로 배열 을 반전 시 킬 수 있 습 니 다

    날짜 종류:
    자바 의 Date 류 와 매우 유사 하 다

    내 장 된 대상:ECMAScript 에서 제공 하 는 숙주 환경 에 독립 된 모든 대상 을 실현 합 니 다.
  • Global 대상:Global 대상 은 ECMAScript 에서 가장 특별한 대상 입 니 다.직접 방문 하거나 호출 할 수 없 지만 ECMAScript 에는 독립 된 함수 가 존재 하지 않 습 니 다.모든 함 수 는 특정한 대상 의 방법 이 어야 합 니 다.그래서 우리 가 앞서 언급 한 isNaN(),isFinite(),parseInt(),parseFloat()등 은 모두 글로벌 대상 의 방법 이다.그 밖 에 encodeURI()와 encodeURIComponent()방법 은 브 라 우 저 에 전 달 된 URI 를 인 코딩 하 는 데 사 용 됩 니 다(예 를 들 어 빈 칸 을%20 으로 인 코딩 하 는 것).물론 이에 대응 하 는 decodeURI()와 decodeURIComponent()방법 이 있 습 니 다.마지막 으로 가장 강력 한 방법 인 eval()입 니 다.이 방법 은 전체 ECMAScript 의 해석 프로그램 처럼 실행 할 JavaScript 문자열 을 받 아들 입 니 다.이런 기능 은 매우 강하 지만 매우 위험 하 며 코드 에 주 입 될 가능성 이 있다
  • Math 대상:수학 함수 제공(설명 하지 않 음)
  • 숙주 대상:모든 BOM 과 DOM 대상 은 숙주 대상(브 라 우 저 환경 에 의존 하 는 대상 이기 때문에 브 라 우 저 호환성 문제 가 불가피 하 다)
  • 4.클래스 또는 대상 정의
    공장 방식
  • function createCar() {
        var temp = new Object;
        temp.color = "red";
        temp.brand = "Benz";
        temp.drive = function() {
            alert(this.brand + " is running...");
        }
        return temp;
    }
    
    var car = createCar();
    car.drive();
    


  • 구조 기 방식
  • function Car(brand, color) {
    	if(this instanceof Car) {
    		this.brand = brand;
    		this.color = color;
    		this.drive = function() {
    			alert(this.brand + " is running...");
    		};
    	}
    }
    
    var car = new Car("Benz", "black");
    car.drive();


  • 원형 방식
  • function Car() {
    }
    
    Car.prototype.brand = "Benz";
    Car.prototype.color = "black";
    Car.prototype.drive = function() {
    	alert(this.brand + " is running...");
    }
    
    var car = new Car();
    car.drive();


  • 5.상속
    1.계승의 개념
    계승 은 한 종 류 를 다른 종류의 방법 과 속성 을 다시 사용 할 수 있 게 하고 기 존의 기능 을 확장 할 수 있 게 한다.
    2.상속 방식
    대상자 사칭
  • function Person(name) {
    	this.name = name;
    	this.eat = function(place) {
    		alert(this.name + " is eating at " + place);
    	};
    }
    
    function Student(name, id) {
    	this.newMethod = Person;
    	this.newMethod(name);
    	delete this.newMethod;
    
    	this.id = id;
    	this.study = function() {
    		alert(this.name + " is studying...");
    	};
    }
    
    var p1 = new Person("LUO Hao");
    var p2 = new Student("LIAO Qiang", 1234);
    p1.eat("Jinjiang Hotel");
    p2.eat("1st Dinning Hall");
    p2.study();

  • call()방법
  • function Person(name) {
    	this.name = name;
    	this.eat = function(place) {
    		alert(this.name + " is eating at " + place);
    	};
    }
    
    function Student(name, id) {
    	Person.call(this, name);
    
    	this.id = id;
    	this.study = function() {
    		alert(this.name + " is studying...");
    	};
    }
    
    var p1 = new Person("LUO Hao");
    var p2 = new Student("LIAO Qiang", 1234);
    p1.eat("Jinjiang Hotel");
    p2.eat("1st Dinning Hall");
    p2.study();


  • apply()방법
  • function Person(name) {
    	this.name = name;
    	this.eat = function(place) {
    		alert(this.name + " is eating at " + place);
    	};
    }
    
    function Student(name, id) {
    	Person.apply(this, arguments); // 2nd parameter is an array
    
    	this.id = id;
    	this.study = function() {
    		alert(this.name + " is studying...");
    	};
    }
    
    var p1 = new Person("LUO Hao");
    var p2 = new Student("LIAO Qiang", 1234);
    p1.eat("Jinjiang Hotel");
    p2.eat("1st Dinning Hall");
    p2.study();


  • 원형 체인
  • function Person(name) {
    	this.name = name;
    	this.eat = function(place) {
    		alert(this.name + " is eating at " + place);
    	};
    }
    
    function Student() {
    	this.name = name;
    	this.id = id;
    	this.study = function() {
    		alert(this.name + " is studying...");
    	};
    }
    
    Student.prototype = new Person(this.name);
    Student.prototype.constructor = Student;
    
    var p1 = new Person("LUO Hao");
    var p2 = new Student("LIAO Qiang", 1234);
    p1.eat("Jinjiang Hotel");
    p2.eat("1st Dinning Hall");
    p2.study();


  • 계승 이 언급 된 이상 다 중(poly morphism)의 예 를 살 펴 보 자.
  • function ParentClass() {
    		this.foo = function() {
    			alert("This is common");
    		}
    
    		this.method = function() {
    			alert("parent-class method");
    		}
    	}
    
    	// just the same as static method of a class
    	SubClass1.goo = function() {
    		alert("gogo1");
    	}
    	SubClass2.goo = function() {
    		alert("gogo2");
    	}
    
    	function SubClass1() {
    		this.method = function() {
    			alert("sub-class1 method");
    		}
    	}
    
    	function SubClass2() {
    		this.method = function() {
    			alert("sub-class2 method");
    		}
    	}
    
    	SubClass1.prototype = new ParentClass();
    	SubClass1.prototype.constructor = SubClass1;
    
    	SubClass2.prototype = new ParentClass();
    	SubClass2.prototype.constructor = SubClass2;
     
    	var o1 = new SubClass1();
    	var o2 = new SubClass2();
    	var array = new Array(2);
    	array.push(o1);
    	array.push(o2);
    
    	for(var y in array) {
    		if(array[y] instanceof SubClass1) {
    			SubClass1.goo();	// like static method
    		}
    		else if(array[y] instanceof SubClass2) {
    			SubClass2.goo();
    		}
    		array[y].foo();
    		array[y].method();	//polymorphism method
    	}
  • 좋은 웹페이지 즐겨찾기