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 중국어 웹사이트의 기타 관련 기사를 참조하세요!