>웹 프론트엔드 >JS 튜토리얼 >javascript 혼합 생성자와 프로토타입 메소드, 동적 프로토타입 method_js 객체지향

javascript 혼합 생성자와 프로토타입 메소드, 동적 프로토타입 method_js 객체지향

WBOY
WBOY원래의
2016-05-16 18:40:04870검색

다음 두 가지 방법은 일상적인 JS 프로그래밍에서 가장 일반적으로 사용됩니다.
1. 혼합 생성자 및 프로토타입 방법(강조)

code 코드는 다음과 같습니다:

function car (sColor,iNumbers){ // 생성자는 객체의 모든 비함수 속성을 정의하는 데에만 사용됩니다. 즉, 객체의 속성
this.color = sColor;
this.numbers = iNumbers;
this.dirvers = new Array ("Jone","Leon");
car.prototype.showColor = function(){ // 프로토타입 메소드는 객체의 모든 함수 속성, 즉 객체의 메소드를 정의하는 데에만 사용됩니다.
alert(this.color)
}
var car1 = 새 자동차("빨간색");
var car2 = 새 자동차("노란색")
car1.showColor)()
car2.showColor)(); >

요약: (new) 생성 시 새로운 객체 인스턴스 car1과 car2가 생성되면 car1과 car2 모두 이때 함수 ​​객체 car의 모든 비함수 속성인 showColor 메서드를 상속합니다. car 함수 객체의 프로토타입에서 car 함수 외부에서 생성됩니다. 이때 car1과 car2는 car의 프로토타입에 있는 showColor 메서드를 참조하게 됩니다. 프로토타입 메서드를 car 함수 본문에 넣으면 car1과 car2가 됩니다. 현재는 참조 관계에 있지 않습니다. 대신, 함수가 실행될 때마다 showColor 함수가 생성됩니다. 100개의 자동차가 있으면 100개의 함수를 반복적으로 생성해야 합니다. 따라서 비기능적 속성과 기능적 속성은 별도로 작성해야 합니다.

2. 동적 프로토타입 방식(핵심)

function car(sColor,iNumbers){ // 생성자는 객체의 모든 비함수 속성, 즉 객체의 속성을 정의하는 데에만 사용됩니다.
this.color = sColor;
this.numbers = iNumbers;
this.dirvers = new Array ("Jone","Leon")
if(typeof car._initialized=="undefine"){ //여기 여기에서 car._initialized가 설정되면 계속 실행합니다. 다음 함수
car.prototype.showColor = function(){
alert(this.color)
}
}
car. _initialized = true; //
은 여기서 중지하고 두 번째로 실행하지 않도록 실행됩니다. 왜냐하면 현재 car._initialized는 함수 객체의 프로토타입 속성이 아니라 함수의 속성일 뿐이기 때문입니다. 프로토타입 속성, new 함수 객체의 인스턴스는 함수 내부를 변경합니다. 프로토타입 객체의 속성을 사용하면 showColor 함수가 반복적으로 구성됩니다. 이런 이유로 car._initialized가 undefine일 때 showColor를 한 번 실행하고 최종적으로 car._initialized=true를 얻습니다. 이때 함수 ​​프로토타입의 속성이 변경되지 않으므로 외부 new가 됩니다. 객체 인스턴스는 함수의 속성을 변경할 수 있는 방법이 전혀 없습니다. 빨간색 부분의 코드는 모두 한 가지 작업을 수행합니다. 빨간색 코드 사이의 메서드만 실행하고 각 메서드는 한 번만 실행되며 실행되지 않습니다. 반복적으로 실행됩니다!
}
var car1 = 새 차("빨간색");
var car2 = 새 차("노란색")
car1.showColor()
car2.showColor();


요약: 위의 두 가지 방법 중 어떤 방법을 사용해도 동일한 효과를 얻을 수 있습니다!
방법 1: 생성자와 프로토타입 방법을 혼합한 방식은 비함수 속성과 일반 속성을 별도로 작성하는 것과 동일하므로 새로운 객체가 생성될 때 새로운 함수가 반복적으로 생성되지 않고 지식 함수의 프로토타입이 생성됩니다. 이때 참조하는 객체 메소드 및 함수 객체 속성입니다. 그러나 코드는 캡슐화되지 않은 것으로 보이며 아무 영향도 미치지 않습니다.
방법 2: JAVA 프로그래밍 코딩 스타일을 완벽하게 활용하여 JS 프로그래밍을 구현합니다. 이것의 장점은 전체 함수가 속성과 메소드가 함수 본문에 "캡슐화"되어 "클래스"처럼 보인다는 것입니다. (과거 복습 및 새로 배우기: JS에는 실제로 클래스가 없습니다. 클래스가 있다고 하면 함수 클래스라고 생각하면 됩니다.) 단점은 if() 문을 사용하는 것이 별로 보이지 않는다는 것입니다. 친숙한.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.