: 초기화 값 (오히려 참조 유형과) 값 타입의 인스턴스 변수에 대한 프로토 타입에 https://developers.google.com/speed/articles/optimizing-javascript#initializing-instance-variablesJavascript에서 참조 유형이있는 인스턴스 변수를 생성자에 넣어야하는 이유는 무엇입니까? 구글 개발자 통찰력에서 발췌 읽기
장소 인스턴스 변수 선언/초기화를 (형식 번호 즉, 값, 부울, null, 정의되지 않음 또는 문자열). 이렇게하면 생성자가 호출 될 때마다 초기화 코드를 불필요하게 실행하지 않아도됩니다. (이것은 그 초기 값 건설시의 생성자 또는 일부 다른 상태로의 인자에 의존 인스턴스 변수들에 대해 수행 될 수 없다.) 예를 들어
대신 :
foo.Bar = function() {
this.prop1_ = 4;
this.prop2_ = true;
this.prop3_ = [];
this.prop4_ = 'blah';
};
사용 :
foo.Bar = function() {
this.prop3_ = [];
};
foo.Bar.prototype.prop1_ = 4;
foo.Bar.prototype.prop2_ = true;
foo.Bar.prototype.prop4_ = 'blah';
내가 LOGI을 이해 c는 값 형식을 갖는 변수를 함수 프로토 타입에 넣는 것을 배제하지만 this.prop3_ = [];과 같은 참조 변수가있을 때 초기화 코드를 실행하지 않습니다. (Google 예제와 같이)? 이것은 생성자를 호출 할 때마다 새로운 배열을 생성하지 않습니까?
"생성자를 호출 할 때마다 새 배열을 만들지 않습니까?" - 그게 핵심입니다. – user2357112
"참조 유형"또는 "값 유형"이 없습니다. 유효한 언어 유형은 [* ECMA-262 §6.1 *] (http://ecma-international.org/ecma-262/7.0/index.html#sec-ecmascript-language-types)에 나와 있습니다. 변수는 값을 가지며 값은 [* 기본 값 *] (http://ecma-international.org/ecma-262/7.0/index.html#sec-primitive-value) 또는 * 참조 * (일명 [* 참조 사양 유형 *] (http://ecma-international.org/ecma-262/7.0/index.html#sec-reference-specification-type)). – RobG