>  기사  >  웹 프론트엔드  >  생성자를 사용하여 새 항목 없이 JavaScript에서 객체를 만드는 방법

생성자를 사용하여 새 항목 없이 JavaScript에서 객체를 만드는 방법

高洛峰
高洛峰원래의
2016-11-26 09:14:421052검색

JS에서 객체를 생성하는 것은 직접 수량을 사용할 수 있습니다. 여기서 논의할 것은 생성자(함수)를 정의하는 경우입니다. 다음과 같습니다
function Person(name, age) {
this.name = name;
this.age = age;
}
var p = new Person('lily', 20) ;

일부 라이브러리 코드가 새로운 객체 없이 일반 객체를 생성한다는 것은 이상합니다.
var reg = RegExp('^he$');

테스트 결과 new 사용 여부에 관계없이 최종 반환된 객체는 일반 객체이고 유형은 모두 "객체"인 것으로 확인되었습니다. .
var reg1 = new RegExp('^he$');
var reg2 = RegExp('^he$');
reg1.test('he') // true
reg2 .test('he'); // true
console.log(typeof reg1); // object
console.log(typeof reg2); // object

흠, 꽤 좋습니다. 코드가 잘 실행됩니다.
이런 경우에는 new를 전혀 작성하지 마세요. 이렇게 하면 코드 양이 절약됩니다. 다른 유형에도 마찬가지인가요? 문자열/숫자/부울을 사용해 보세요.
var str1 = new String(1);
var str2 = String(1);
var num1 = new Number('1');
var num2 = Number('1');
var boo1 = new Boolean(1);
var boo2 = Boolean(1);
console.log(typeof str1); // object
console.log(typeof str2); string
console.log(typeof num1); // object
console.log(typeof num2); // number
console.log(typeof boo1); typeof boo2); // boolean

일반적인 경우와 다르다는 것을 알 수 있습니다. 일반적으로 새로운 것인지 아닌지에 관계없이 typeof 뒤에는 object가 옵니다.
그러나 문자열/숫자/부울 유형의 경우 새 객체 유형of는 "object"를 반환하고 새 유형이 아닌 유형of는 "string"을 반환합니다.
즉, new가 적용되지 않는 경우 다른 유형을 각각 문자열, 숫자, 불리언 유형으로 변환할 수 있습니다.

자, 이 장의 시작 부분에 있는 Person 클래스로 돌아가 보겠습니다. 즉, 우리가 직접 작성한 클래스가 new 연산자를 사용하지 않고 객체를 생성할 수 있습니까?
function Person(이름, 나이) {
this.name = 이름;
this.age = 나이;
}
var p = Person('lily', 20);
console.log(p); // 정의되지 않음

은 정의되지 않음을 반환하며 이는 분명히 불가능합니다. 따라서 new를 사용하지 않고 Person 인스턴스를 생성하는 것은 환상적입니다.
실현해야 한다면? 실제로는 다음과 같이 작동합니다
function Person(name, age) {
this.name = name;
this.age = age;
if (this===window) {
return new Person(name, age);
}
}
var p = Person('lily', 20); // object

Person 클래스를 약간 수정했습니다. 실제로 Person이 생성자로 실행되는지 함수로 실행되는지는 내부적으로 구별됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.