객체 지향 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 ()
구문을 사용하면 모든 코드를 별도로 코딩 할 필요가 없습니다..