JavaScript(03):대상 지향
7292 단어 JavaScript
1.대상 을 향 한 기본 개념
자바 나 C\#를 잘 아 는 개발 자 에 게 대상 을 대상 으로 하 는 개념 과 패키지,계승,다 중 등 명 사 는 낯 설 지 않 을 것 이다.ECMAScript 는 정식 클래스 가 없습니다.대상 정 의 는 함수 인 구조 함수 에 저 장 됩 니 다.자 바스 크 립 트 에서 구조 함 수 는 일반 함수 에 비해 특별한 점 이 없습니다.
ECMAScript 에서 대상 은 특성(attribute)으로 구성 되 어 있 으 며,특성 은 원시 값 일 수도 있 고 인용 값 일 수도 있 으 며,특성 이 함수 로 저장 되 어 있 으 면 대상 으로 볼 수 있 는 방법(method),기타 대상 으로 볼 수 있 는 속성(property)입 니 다.
2.대상 의 생 성과 사용
대상 의 생 성과 폐 기 는 자 바스 크 립 트 실행 과정 에서 발생 합 니 다.대상 은 키워드 new 뒤 꿈 치 를 예화 할 클래스 이름 으로 만 들 었 습 니 다.
var obj = new Object();
var str = new String();
ECMAScript 는 쓰레기 수 거 메커니즘 을 정의 하 는데,이 는 전문 적 으로 대상 을 소각 하지 않 고 메모 리 를 방출 하지 않 아 도 된다 는 것 을 의미한다.한 대상 이 인용 되 지 않 으 면 해당 대상 은 폐지 되 고 쓰레기 수 거 기 는 작 동 하면 폐지 대상 이 폐기 된다.대상 의 인용 을 null 로 설정 하면 이 대상 을 폐지 할 수 있 습 니 다.오래된 브 라 우 저 에 대해 서 는 완전한 쓰레기 회수 메커니즘 이 없 기 때문에 대상 이 정확하게 소각 되 지 않 을 수 있 습 니 다.대상 과 그 모든 특성 을 폐지 하 는 것 이 메모리 사용 을 확보 하 는 가장 좋 은 방법 입 니 다.
3.대상 의 유형
Array 클래스:
4.567917.배열 은 최대 4294967295(2 의 32 차방 감 1)를 보관 할 수 있 고 대부분 프로그램 설계 의 수 요 를 만족 시 킬 수 있다
4.567917.배열 은 sort()방법 을 제공 하여 정렬 작업 을 할 수 있 고 reverse()방법 으로 배열 을 반전 시 킬 수 있 습 니 다
날짜 종류:
자바 의 Date 류 와 매우 유사 하 다
내 장 된 대상:ECMAScript 에서 제공 하 는 숙주 환경 에 독립 된 모든 대상 을 실현 합 니 다.
공장 방식
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();
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
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.