>웹 프론트엔드 >JS 튜토리얼 >JavaScript에서 객체의 클래스 이름을 얻는 방법은 무엇입니까?

JavaScript에서 객체의 클래스 이름을 얻는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-08 13:27:17405검색

How to Get the Class Name of an Object in JavaScript?

JavaScript에는 객체 클래스의 이름을 얻기 위한 Java의 'class.getName()' 메소드와 직접적으로 동등한 것이 없습니다.

ES2015 업데이트 :

class Foo {}
console.log(Foo.name); // "Foo"

클래스가 아닌 객체의 경우 '클래스' 지정 thing.constructor.name' 속성을 사용하여 찾을 수 있습니다.

var obj = {name: "John"};
console.log(obj.constructor.name); // "Object"

해킹 및 대안:

네이티브 'class.getName()은 없지만 '에 상응하는 클래스를 얻기 위한 다양한 해킹 및 대체 방법이 있습니다. name:

Object.prototype.getName() 해킹(권장하지 않음):

이 해킹은 객체 프로토타입을 수정하고 'getName()' 함수를 모든 객체에 추가합니다. 생성자 이름을 문자열로 반환할 수 있습니다.

Object.prototype.getName = function() {
  var funcNameRegex = /function (.{1,})\(/;
  var results = funcNameRegex.exec(this.constructor.toString());
  return results && results.length > 1 ? results[1] : "";
};

var obj = {name: "John"};
console.log(obj.getName()); // "Object"

생성자 속성 사용 (문제 있음):

모든 객체에는 자신을 생성한 생성자 함수를 가리키는 'constructor' 속성이 있습니다.

var myArray = [1, 2, 3];
console.log(myArray.constructor === Array); // true

그러나 'constructor' 속성에 의존하는 것은 문제가 되는 이유:

  • 상속이 있는 경우 정확한 정보를 제공하지 못할 수 있습니다. 관련됩니다.
  • 크로스 프레임과 크로스 윈도우가 깨집니다.

instanceof 사용(또한 문제가 있음):

'instanceof' 연산자는 유형 검사에도 사용할 수 있습니다.

var myArray = [1, 2, 3];
console.log(myArray instanceof Array); // true

그러나 'instanceof'는 그렇지 않습니다. 리터럴 값에는 작동하지 않으며 프레임 간 및 창 간도 중단됩니다.

Object.prototype.toString 사용:

Object.prototype.toString은 문자열 표현을 반환합니다. 객체 유형의 정보입니다.

console.log(Object.prototype.toString.call('abc')); // "[object String]"
console.log(Object.prototype.toString.call(/abc/)); // "[object RegExp]"

이 접근 방식은 내장 유형에 대한 유형 정보를 제공하지만 모든 사용자 정의 유형에 대한 '객체'입니다.

주의 사항:

앞서 언급한 모든 방법에는 주의 사항이 있으며 모든 상황에서 신뢰할 수 없을 수도 있습니다. 특히 상속 및 익명 함수를 다룰 때는 객체의 구성 방법을 고려하세요.

위 내용은 JavaScript에서 객체의 클래스 이름을 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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