>  기사  >  웹 프론트엔드  >  JavaScript_js 객체지향에서의 객체지향 소개

JavaScript_js 객체지향에서의 객체지향 소개

WBOY
WBOY원래의
2016-05-16 17:52:161645검색

객체
생성
객체
생성자
공용, 개인, 특권, 정적 멤버
이것을 호출하고 적용합니다.
예외 처리
상속
프로토타입
객체
자바스크립트에서는 모든 것이 객체라고 할 수 있는데 객체란 무엇일까요? 객체는 변수와 함수의 모음입니다. 다른 객체지향 언어에서는 객체가 클래스에서 인스턴스화됩니다. JavaScript는 프로토타입 기반 객체지향 언어입니다. 객체는 기존 객체의 복사본에서 파생됩니다. JavaScript의 객체는 함수와 객체라는 두 가지 범주로 나눌 수 있습니다.

객체 생성

효율성을 높이기 위해 JavaScript에는 Object, Function, Array 등과 같은 객체가 내장되어 있습니다. 모든 내장 객체는 새로움을 통해 창조됩니다. 함수 객체는 인스턴스와 생성자의 두 가지 범주로 나뉩니다. 예를 들어, Alert('my name is X')는 생성자로서 Function의 인스턴스이며, Function은 new를 통해 인스턴스화되어야 합니다. 생성된 객체의 구문은 다음과 같은 종류로 나누어집니다.

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

var obj= new Object();var obj={};(배열 및 유사)
var myFunction=new Function(){//code};function myFunction(){//code}

Function 선언의 첫 번째 유형은 사용 전이어야 하고 두 번째 유형은 사용 후일 수 있습니다.

생성자

생성자를 만드는 것은 위의 함수를 만드는 것과 비슷합니다.
코드 복사 코드는 다음과 같습니다.

var myFunction=new Function('a',/*code*/)
function myFunction(a){
/*Code*/
}

단, 첫 번째는 성능상의 문제가 있으므로 두 번째는 함수의 특성상 사용을 권장합니다. 객체의 인스턴스를 생성자로 사용할 수도 있다는 점입니다.

정적 멤버

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

var myObj= new Object();
//이름 속성 추가
myObj.name='LD'//alertName 메서드 추가
myObj .alertName=function(){
alert(this.name);
}
//alertName
myObj.alertName() 실행

AlertName은 생성자가 아닌 myObj 인스턴스에 존재합니다. 이는 이해하기 쉽지만 생성자이자 인스턴스가 될 수 있는 함수의 경우 다음과 같이 이해하기가 쉽지 않습니다.

코드 복사 코드는 다음과 같습니다.
var myConstructor=new function(){
//정적 속성 추가
myConstructor.name='LD'
//정적 메소드 추가
myConstructor.alertName=function(){
alert(this.nam);
}
}
myConstructor.alertName()

코드 myConstructor가 인스턴스일 수 있기 때문에 이것은 잘 작동하지만 name과 AlertName은 myConstructor의 새 인스턴스에 적용되지 않습니다.


공개 멤버
객체의 인스턴스화를 따를 수 있는 멤버를 공개 멤버라고 합니다. 함수의 프로토타입을 수정해야 합니다. 즉 프로토타입이다. 공용 메소드는 다음과 같이 생성자와 함께 상속될 수 있습니다.

코드 복사 코드는 다음과 같습니다.
function myConstructor(){
}
//공용 속성 추가
myConstructor.prototype.myName='LD';
//Instantiate
var myObj=new myConstructor() ;
alert(myObj.myName);

myConstructor 인스턴스 자체 대신 myConstructor의 기본 정의에 공개 멤버를 추가했기 때문에 myConstructor 자체는 myName을 사용할 수 없습니다. .
비공개 멤버
비공개 멤버는 생성자에 정의된 변수 및 메서드를 참조하며, 이는 다른 언어 클래스의 비공개 정의와 유사합니다. 예:

코드 복사 코드는 다음과 같습니다.
function myConstructor(){
//개인 속성 추가
var myName='Ld'l
//비공개 메소드 추가
var AlertName=function(){
alert('LD')
}
alertName();

권한 있는 멤버

권한 있는 메서드는 공개적으로 액세스할 수 있고 프라이빗 멤버에 액세스할 수 있는 메서드를 의미합니다. 이렇게 정의된 메서드는 항상 생성자 범위에서 사용됩니다.
코드 복사 코드는 다음과 같습니다.

function myConstructor (){
//개인 속성
var sex='male';
// 권한 있는 메서드
this.alertSex=function(){
alert(sex); 🎜>}
}



객체 리터럴
이전에는 점을 사용하여 생성했습니다(예: myConstructor.name=x; myConstructor .sex=x. 동일한 목적을 달성하기 위해 객체 리터럴을 사용할 수도 있습니다. 예를 들어

코드 복사 코드는 다음과 같습니다.
function myConstructor(){
}
//공개 멤버 추가
myConstructor.prototype={
name:'LD',
sex:'male',
method :function(){}
}

객체 리터럴의 구분 기호는 쉼표이며, 마지막 속성이나 메서드의 끝에는 쉼표가 없습니다. 구문 분석 오류.
this, 호출 및 적용
this는 실행 환경에 따라 달라지며 생성 위치와는 아무런 관련이 없는 키워드입니다. 다른 언어로는 이해하기 어렵지 않다고 합니다.
호출하고 적용하면 메소드가 객체에 강제로 연결됩니다. 예:

코드 복사 코드는 다음과 같습니다.
//alertName은 생성된 함수입니다.
//alertName에는 매개변수가 필요하지 않습니다.
alertName.call('object')
//alertName에는 매개변수가 필요합니다.
AlertName.call('object','parameter1','parameter2')
//alertName이 매개변수 배열을 사용하는 경우
alertName.appplay('object','parameter arrayargs')



예외 처리
는 C#과 유사하며 다음과 같이 try 및 catch로 구성됩니다.

코드 복사 코드는 다음과 같습니다.
function myFunction(){
window.style.color='red'
}
try {
myFunction();
}
catch{
alert('Exception message:' 예외 이름 예외.message)
}

상속 및 프로토타입 더 많은 내용이 있으니 다음 블로그 "JavaScript의 상속과 프로토타입"에 올리겠습니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.