실제로 JavaScript로 객체를 생성하는 방법에는 여러 가지가 있습니다. 객체를 만들고 싶을 때는 " new "연산자를 사용하여 " 생성자 기반 "객체를 만들면 아무런 이점이 없습니다 . " 객체 리터럴 "구문을 사용하여 객체를 만드는 것과 같습니다 . 그러나 " new "연산자로 생성 된 " 생성자 기반 "개체 는 " 프로토 타입 상속 "에 대해 생각할 때 매우 유용합니다 . 리터럴 구문으로 작성된 오브젝트로 상속 체인을 유지할 수 없습니다. 그러나 생성자 함수를 만들고 속성과 메서드를 프로토 타입에 연결할 수 있습니다 ."연산자를 사용하면 해당 생성자 함수의 프로토 타입에 연결된 모든 메서드 및 속성에 액세스 할 수있는 개체가 반환됩니다.
다음은 생성자 함수를 사용하여 객체를 생성하는 예입니다 (하단의 코드 설명 참조).
function Person(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
Person.prototype.fullname = function() {
console.log(this.firstname + ' ' + this.lastname);
}
var zubaer = new Person('Zubaer', 'Ahammed');
var john = new Person('John', 'Doe');
zubaer.fullname();
john.fullname();
이제 Person 생성 함수를 인스턴스화하여 원하는 수의 객체를 만들 수 있으며 모든 객체는 fullname ()을 상속합니다.
참고 : " this "키워드는 생성자 함수 내에서 빈 객체를 참조하며 " new "연산자를 사용하여 Person에서 새 객체를 만들 때마다 " this "키워드로 연결된 모든 속성과 메서드가 포함 된 객체를 자동으로 반환 합니다. . 그리고이 객체는 Person 생성자 함수 의 프로토 타입 에 첨부 된 메소드와 속성을 확실히 상속합니다 (이 접근 방식의 주요 이점).
그런데 " 객체 리터럴 "구문 과 동일한 기능을 얻으려면 다음과 같이 모든 객체에 대해 fullname ()을 만들어야합니다.
var zubaer = {
firstname: 'Zubaer',
lastname: 'Ahammed',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
var john= {
firstname: 'John',
lastname: 'Doe',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
zubaer.fullname();
john.fullname();
마지막으로, 왜 객체 리터럴 접근법 대신 생성자 함수 접근법을 사용해야하는지 묻는다면 :
*** 프로토 타입 상속은 매우 유용하고 강력 할 수있는 간단한 상속 체인을 허용합니다.
*** 생성자 함수 프로토 타입에 정의 된 공통 메소드 및 특성을 상속하여 메모리를 절약합니다. 그렇지 않으면 모든 객체에서 반복해서 복사해야합니다.
이것이 의미가 있기를 바랍니다.
a = new Object
,a = new Object()
,a = {}
, 문자는 훨씬 간단하고 전에 더 빨리, 더 새로운 컴파일러 내 문을 허위로 원인이 될 수라고하면서 몇 가지 검사가 나는 달렸다. 리터럴 배열에도 동일하게 적용