1. 생성자란
Java, C, PHP와 같은 일부 객체 지향 언어에서는 생성자가 매우 일반적입니다. Javascript에서 생성자는 먼저 new 연산자를 사용하여 호출할 수 있고 특수 유형의 객체를 생성하는 일반 함수입니다.
// "Benjamin"은 생성자입니다
var benjamin = new Benjamin("zuojj", "남성");
위의 예에서 benjamin은 Benjamin 객체인데 어떻게 인스턴스화되나요?
함수 Benjamin(사용자 이름, 성별) {
This.username = 사용자 이름;
This.sex = 섹스;
}
var benjamin = new Benjamin("zuojj", "남성");
//출력: Benjamin{sex: "male",username: "zuojj"}
console.log(벤자민);
보시다시피 "Benjamin" 생성자는 전달된 매개변수를 수신하여 this 객체에 할당합니다. 이는 new 연산자가 생성자를 호출할 때 생성자의 this 객체에 new 연산에서 반환된 객체가 할당되기 때문입니다.
이는 위의 코드가 다음과 동일함을 의미합니다.
벤자민 = {
"사용자 이름": "zuojj",
"섹스": "남성"
}
2. 생성자를 사용하는 이유
생성자를 사용하는 데는 여러 가지 이유가 있습니다.
1. 생성자를 사용한다는 것은 동일한 기본 구조를 사용하여 이러한 모든 객체를 생성할 수 있음을 의미합니다
2. 생성자를 사용한다는 것은 "benjamin" 객체가 명시적으로 "Benjamin" 함수의 인스턴스로 표시된다는 의미입니다.
함수 Benjamin(사용자 이름, 성별) {
This.username = 사용자 이름;
This.sex = 섹스;
}
var benjamin = new Benjamin("zuojj", "남성");
var 벤 = {
"사용자 이름": "zuojj",
"섹스": "남성"
}
//출력: true
console.log(벤자민 인스턴스);
//출력: false
console.log(벤자민의 벤 인스턴스);
3. 생성자를 사용한다는 것은 여러 인스턴스에서 공유할 수 있도록 프로토타입에 공개 메서드를 정의할 수 있다는 의미입니다.
함수 Benjamin(사용자 이름, 성별) {
This.username = 사용자 이름;
This.sex = 섹스;
}
Benjamin.prototype.getName = function() {
return this.username;
}
var benjamin = new Benjamin("zuojj", "남성");
var ben = new Benjamin("레몬", "여성");
//출력: zuojj
console.log(benjamin.getName());
//출력: 레몬
console.log(ben.getName());
3. 주의사항
1.새로운 키워드
생성자를 인스턴스화할 때 new 키워드를 사용하는 것을 잊지 마십시오. new 키워드를 사용할지 여부는 this 개체에 큰 영향을 미칩니다. new 키워드가 없으면 this 개체는 전역 개체(브라우저의 창 및 전역 개체)를 가리킵니다. 마디). 따라서 생성자를 정의할 때 함수 이름의 첫 글자를 대문자로 표기하는 것이 좋습니다.
2. 호출된 함수에 명시적인 반환 표현식이 없으면 암시적으로 this 개체, 즉 새로 생성된 개체를 반환합니다. 그렇지 않으면 반환된 결과에 영향을 주지만 개체를 반환하는 경우에만
함수 바() {
2개 반납;
}
var bar = new Bar();
//새로 생성된 객체를 반환
//출력: Bar {}
console.log(bar);
함수 테스트() {
This.value = 2;
복귀 {
foo: 1
};
}
var test = new Test();
//반환된 객체
//출력: 객체 {foo: 1}
console.log(테스트)
우리가 주목해야 할 점은
a) new Bar()는 숫자 2의 리터럴 값이 아닌 새로 생성된 객체를 반환합니다. 따라서 new Bar().constructor === Bar이지만 숫자 객체가 반환되면 결과가 다릅니다.
b) 여기에서 얻은 새로운 Test()는 아래와 같이 new 키워드를 통해 새로 생성된 객체가 아니라 함수에 의해 반환된 객체입니다.
함수 바() {
2개 반납;
}
var bar = new Bar();
함수 BarN() {
새 번호(2)를 반환합니다.
}
var barn = new BarN();
//출력: true
console.log(bar.constructor === Bar);
//출력: 숫자 {}
console.log(헛간);
//출력: false
console.log(barn.constructor === BarN);
//출력: true
console.log(barn.constructor === 숫자);
/*---------------------*/
함수 테스트() {
This.value = 2;
복귀 {
foo: 1
};
}
var test = new Test();
//출력: 정의되지 않음
console.log(test.value);
//출력: 1
console.log(test.foo);
위 내용은 생성자 함수에 대한 요약입니다. 글에 부적절한 내용이 있으면 비판하고 수정하도록 하겠습니다.