> 웹 프론트엔드 > JS 튜토리얼 > JavaScript는 객체 지향 클래스를 위한 기능적 작성 기술을 구현합니다.

JavaScript는 객체 지향 클래스를 위한 기능적 작성 기술을 구현합니다.

WBOY
풀어 주다: 2016-05-16 18:33:06
원래의
932명이 탐색했습니다.

Java, C#, VB를 공부한 사람이라면 누구나 클래스의 개념을 알고 있으며, 클래스에는 상속, 캡슐화, 다형성 등의 기능이 있습니다. 자바스크립트는 객체지향 언어가 아니라 해석형 언어입니다.
그러나 JavaScript를 사용하여 상속과 다형성을 구현할 수도 있습니다.
Javascript 구현 클래스에는 다양한 메소드가 있습니다.
방법 1: 시공방법.
코드

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

함수 코더(){
this.name = '샤오왕';
this.job = '프로그래머';
this.coding = function ()
{
alert('코드를 작성 중입니다');
}
}
var coder=new coder();
alert(coder.name);
coder.coding()

방법 2: 팩토리 메소드 .
코드
코드 복사 코드는 다음과 같습니다.

function createCoderFactory(){
var obj=new Object();
obj.name = '샤오 왕';
obj.job = '프로그래머'
obj.coding = function(){
alert( '코드 작성 중');
return obj;
var coder = createCoderFactory()
coder.coding() ;


그러나 팩토리 메소드와 생성자 메소드 모두 동일한 단점이 있습니다. 즉, 인스턴스가 생성될 때마다 클래스의 모든 함수가 인스턴스화됩니다.
방법 3: 프로토타입 체인.
코드



코드 복사 코드는 다음과 같습니다. 함수 코더(){ }
coder.prototype.name = '샤오 왕';
coder.prototype.job = '프로그래머';
coder.prototype.coding = function(){
alert('작성 중입니다. code' );
var coder();
alert(coder.name);


책에서 다음과 같이 말했습니다: 프로토타입 체인의 단점은 하나의 인스턴스가 변경되는 한 모든 속성이 공유된다는 것입니다. 테스트 내용은 다음과 같습니다.



코드 복사
코드는 다음과 같습니다. var coder1 = new coder(); var coder2 = new coder(); alert(coder1.name) /* "Xiao Wang" 표시*/
coder2.name = 'Old Wang'; Alert(coder1.name) ; /*이것은 "Xiao Wang"을 표시합니다. 책에 따르면 "Lao Wang"이 표시되어야 합니다.*/
alert(coder2.name) /*이것은 "Lao Wang"을 표시합니다*/
alert(coder1 .name); 책에 따르면 "Lao Wang"이 표시되어야 하는데 여기서는 "Xiao Wang"이 표시되어 책이 잘못되었습니다.


방법4 : 혼합방법.
위 세 가지 유형은 모두 단점이 있으므로 개선이 필요합니다.



코드 복사

코드는 다음과 같습니다. function coder(){ 이것 .name = '샤오 왕'; this.job = '프로그래머'; }
coder.prototype.coding = function(){
alert('코드를 작성 중입니다.'); 🎜> };


방법 5: 동적 원본 체인.
처음 세 가지 단점을 해결하는 또 다른 방법이 있습니다.
코드



코드 복사


코드는 다음과 같습니다.
함수 코더(){ this.name = '샤오 왕'; this.job = '프로그래머'; if (typeof(coder._init) == 'undefine'){ this.coding = 함수( )
{
alert('코드를 작성 중입니다');
this._init = true
}


이 방법은 어떤가요? 처음 사용하는 경우 _init가 초기화되지 않았기 때문에 코딩 함수를 인스턴스화하기 위해 다음 코드가 실행됩니다. 나중에 다시 실행되지 않으므로 함수는 한 번만 인스턴스화됩니다.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿