홈페이지 » 코딩 » 객체 지향 JavaScript (OOJS) 3 가지 객체 인스턴스 생성 방법

    객체 지향 JavaScript (OOJS) 3 가지 객체 인스턴스 생성 방법

    프로그래밍 언어가 사물에 관한 모든 것, 우리가 배울 필요가있는 첫 번째 것은 객체 생성 방법. JavaScript로 객체를 만드는 것은 매우 쉽습니다. 한 쌍의 중괄호 그러나, 그 일을 할 것입니다. 둘 다 유일한 길 개체를 만드는 방법 유일한 길도 아니다 당신은 이제까지 사용할 필요가있을 것이다.

    자바 스크립트에서 객체 인스턴스는 내장 된 객체로 생성 프로그램이 실행 중일 때 존재하게됩니다. 예를 들어, 날짜 는 날짜에 대한 정보를 제공하는 내장 객체입니다. 한 페이지에 현재 날짜를 표시하려면 런타임 인스턴스 필요 날짜 현재 날짜에 대한 정보를 담고있는.

    자바 스크립트를 사용하면 우리 자신의 객체를 정의한다. 런타임에 자체 객체 인스턴스를 생성 할 수 있습니다. 자바 스크립트에서, 모든 것이 대상이다. 모든 물체에는 궁극의 조상 전화 한 목적. 객체 인스턴스의 생성이 호출됩니다. 인스턴스화.

    1. 새로운 운영자

    새 객체 인스턴스를 만드는 가장 일반적이며 잘 알려진 방법 중 하나는 ~을 사용하여 새로운 운영자.

    당신은 건설자 ~을 만들기 위해 새로운 연산자 작업. 생성자 (constructor)는 객체를 하나의 객체로 묶는 메소드입니다. 그 객체의 새로운 인스턴스. 기본 구문은 다음과 같습니다.

     새 생성자 () 

    생성자는 인수를 수락하다 생성하는 객체 인스턴스에 속성을 변경하거나 추가하는 데 사용할 수 있습니다. 생성자 같은 이름을 가지고있다. 해당 객체로 속한다..

    다음은 생성하는 방법의 예입니다. 날짜() 목적 와 더불어 새로운 예어:

     dt = new Date (2017, 0, 1) console.log (dt) // Sun Jan 01 2017 00:00:00 GMT + 0100 

    날짜() 새로운 생성자입니다. 날짜 목적. 객체에 대한 다른 생성자 다른 주장을하다 동일한 종류의 객체 인스턴스를 생성하려면 다양한 속성.

    JavaScript의 모든 내장 객체가 다음과 같이 인스턴스화 될 수있는 것은 아닙니다. 날짜. 여기에는 생성자가 없다.: 수학, JSON비추다, 그러나 그들은 여전히 ​​보통의 대상이다..

    생성자 (들)을 갖는 내장 객체들 중에서,, 상징 생성자 스타일에서 호출 할 수 없습니다. 새로운 인스턴스를 만들려면 상징 예. 그것은 단지있을 수있다. 함수라고 불리는 새로운 것을 돌려주는 상징 값.

    또한 생성자가있는 내장 객체 중에서 모두를 호출 할 생성자가 필요하지는 않습니다. 새로운 인스턴스화할 연산자. 기능, 정렬, 오류, 과 RegExp 함수로 호출 할 수도있다., 사용하지 않고 새로운 키워드를 사용하면 새 인스턴스 인스턴스를 인스턴스화하고 반환합니다..

    2. 비추다 목적

    백엔드 프로그래머는 이미 익숙 할 수 있습니다. 리플렉션 API. 리플렉션은 다음과 같은 프로그래밍 언어의 기능입니다. 일부 기본 엔티티를 검사하고 업데이트한다., 객체 및 클래스와 같은, 런타임에.

    JavaScript에서는 이미 수행 할 수 있습니다. 약간 반사 조작 목적. 하지만, 적절한 리플렉션 API 결국 자바 스크립트에서도 존재하게되었습니다..

    그만큼 비추다 객체에는 메소드 집합이 있습니다. 객체 인스턴스 생성 및 업데이트. 그만큼 비추다 목적 생성자가 없습니다., 그래서 그것으로 인스턴스화 될 수 없다. 새로운 연산자와 마찬가지로 수학JSON, 그것 함수로 호출 할 수 없다. 어느 한 쪽.

    하나, 비추다 ~을 가지고있다. 동등한 새로운 운영자: Reflect.construct () 방법.

     Reflect.construct (target, argumentsList [, newTarget]) 

    둘 다 목표 및 선택적 newTarget 인수는 자체 생성자가있는 객체, 동안 argumentsList ~이다. 인수 목록 의 생성자에 전달된다. 목표.

     var dt = Reflect.construct (Date, [2017, 0, 1]); console.log (dt); // 일 Jan 01 2017 00:00:00 GMT + 0100 

    위의 코드 같은 효과가있다. 인스턴스화 할 때 날짜() ~을 사용하여 새로운 운영자. 여전히 사용할 수 있지만 새로운, 반사는 ECMAScript 6 표준. 또한 너를 이용하다 newTarget 논의, 이는 또 다른 이점입니다. 새로운 운영자.

    의 가치 newTarget'의 프로토 타입 (정확히 말하면, 그것은 프로토 타입의 newTarget생성자) 새로 생성 된 인스턴스의 프로토 타입이됩니다..

    프로토 타입은 개체의 속성, 그 가치는 또한 대상, 원래 개체의 속성을 가지고 있습니다. 즉, 객체는 프로토 타입에서 멤버를 가져옵니다..

    여기 예제를 보자.

     클래스 B constructor ()  message () console.log ( 'B'메시지) class A   data () console.log ( 'data from B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // message from console.log (obj.data ()); // B console.log의 데이터 (obj instanceof B) // true 

    지나가 다 에 대한 세 번째 주장 Reflect.construct (), 프로토 타입 값 obj 개체가있다. 똑같은 의 프로토 타입으로 의 생성자 (이 속성은 메시지데이터).

    그러므로, obj ~에 액세스 할 수 있습니다. 메시지데이터, 프로토 타입에서 사용할 수 있습니다. 하지만 그때부터 obj 를 사용하여 만든 에이, 또한 자체 소유 메시지 그것 로부터받은 에이.

    비록 obj 배열로 구성되면 ~의 인스턴스가 아닙니다. 정렬, 프로토 타입이 목적.

     obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // 배열 [1, 2, 3] console.log (obj instanceof Array) // false 

    Reflect.construct () 객체를 만들 때 유용 할 수 있습니다. 둘 이상의 청사진을 사용.

    3. Object.create () 방법

    또한 특정 프로토 타입을 가진 새로운 일반 객체 통하다 Object.create (). 이것도 역시이 도구를 사용하는 것과 매우 비슷하게 보일 수 있습니다. 새로운 연산자,하지만 그렇지 않아..

     Object.create (O [, propertiesObject]) 

    그만큼 영형 인수는 프로토 타입을 제공한다. 생성 될 새 객체에 대해 선택 사항 propertiesObject 인수는 속성 목록 새 개체에 추가 할 수 있습니다..

     var obj = Object.create (new A (), data : 쓰기 가능 : 참, 구성 가능 : 참, 값 :  console.log (obj.message ()) // console.log (obj.data ())의 // 메시지 // obj의 데이터 obj1 = Object.create () 새로운 콘솔에서 콘솔 (console) 로그 (obj1.message ()) // 메시지를 가져오고 새로운 A (), foo : 쓰기 가능 : true, configurable : true, value : function () obj1에서 foo를 반환 log (obj1.foo ()) // obj1의 foo 

    에서 obj 추가 된 속성은 데이터, 동안 obj1, 그 . 보시다시피, 우리는 새 객체에 추가 된 속성 및 메서드.

    이 기능은 같은 종류의 여러 객체 하지만 함께 다른 보충 속성 또는 방법. 그만큼 Object.create () 구문을 사용하면 모든 코드를 별도로 코딩 할 필요가 없습니다..