생성자의 원리
자바스크립트 언어는 객체지향 언어이지만 자바스크립트에는 클래스 개념이 없습니다. 따라서 JavaScript는 생성자를 사용하여 클래스의 효과를 시뮬레이션합니다. 즉, 함수를 통해 객체를 생성합니다. 이는 또한 JavaScript에서 함수가 매우 중요한 역할을 한다는 것을 증명합니다. 예:
var Book = function(이름, 가격) {
this.name = 이름;
this.price = 가격;
}
var java = new Book('Master Java', 82);
new 키워드를 사용하여 생성자를 호출하면 실행 컨텍스트가 전역 변수 개체(window)에서 빈 컨텍스트로 변경됩니다. 새로 생성된 인스턴스를 나타냅니다. 따라서 this 키워드는 현재 생성된 인스턴스를 가리킵니다
기본적으로 생성자에 아무것도 반환되지 않으면 this---현재 생성 중인 개체인 현재 컨텍스트가 반환됩니다. . 그렇지 않으면 기본이 아닌 유형 값이 반환됩니다. 명확한 반환 값이 없는 경우 일반 함수는 정의되지 않은 값을 반환합니다.
객체 생성을 위한 생성자 시뮬레이션
사실 new를 사용하여 객체를 생성하는 과정은 신비하지 않습니다. 코드를 사용하여 객체 생성 방법을 시뮬레이션할 수 있습니다.
var Book = 함수(이름) {
this.name = 이름;
};
//일반적인 사용법
var java = new Book('Master Java');
/ /IE가 아닌 브라우저에서 테스트하려면 코드 시뮬레이션을 사용하세요. IE 브라우저는
var python = {};
python.__proto__ = Book;
Book.call(python, ' Master Python') ;
생성자를 일반 함수로 호출
사실 생성자는 일반 함수이므로 var result = Book();과 같이 일반 함수로 호출할 수 있습니다. 물론 결과는 정의되지 않았습니다. 차이점은 함수에서 this의 포인터에 있습니다. 위 생성자를 다시 수정해 보겠습니다.
var Book = function(name, Price) {
this.name = name;
this.price = 가격;
if ( this == window) {
return 'name = ' + name + ", Price = " ', 100) 결과는 "name = Java, 가격 = 100"이고 var java = new Book( "Java", 100)은 새로운 객체를 생성하는 것입니다. JavaScript와 함께 제공되는 많은 생성자는 일반 함수와 생성자의 역할을 모두 수행합니다. 예를 들어 String과 Number가 String과 Number를 생성자로 사용하는 경우
var a = new Number(11);
var b = new Number(11.222);
String과 Number를 일반 함수로 사용하는 경우 유형 변환에 사용할 수 있습니다. 즉, Number 함수는 다른 유형을 숫자 유형으로 변환할 수 있으며, String 함수는 다른 유형을 문자열로 변환할 수 있습니다.
var a = Number('11') //11
var b = Number('hello') //NaN
var d = String(null); //'null'
요약
함수를 생성자로 사용하는 경우 , 함수는 일반적으로 이름의 첫 글자를 대문자로 표시하여 생성자임을 나타냅니다. 동시에 생성자를 호출하려면 new를 사용해야 합니다. 또한, 생성자를 일반 함수처럼 사용하지 않도록 하세요. 전역변수 생성이 쉽고, 반환값을 제대로 처리하지 않으면 생성자 자체의 함수에 영향을 미치기 쉽기 때문입니다.