사용자 정의 개체의 자바 스크립트 유형
내 javascript 객체가 특정 유형인지 어떻게 확인할 수 있습니까?
var SomeObject = function() { }
var s1 = new SomeObject();
위의 경우 typeof s1
"object"를 반환합니다. 별로 도움이되지 않습니다. s1이 SomeObject 유형인지 확인하는 방법이 있습니까?
예, instanceof
( MDN 링크 | 사양 링크 ) 사용 :
if (s1 instanceof SomeObject) { ... }
무엇을하든 obj.constructor.name 또는 생성자의 문자열 버전을 피하십시오. 그것은 코드를 uglify / minify 할 때까지 훌륭하게 작동합니다. 생성자가 모호한 이름 (예 : 'n')으로 바뀌기 때문에 모든 것이 깨지고 코드는 여전히이 작업을 수행하고 일치하지 않습니다.
// Note: when uglified, the constructor may be renamed to 'n' (or whatever),
// which breaks this code since the strings are left alone.
if (obj.constructor.name === 'SomeObject') {}
노트 :
// Even if uglified/minified, this will work since SomeObject will
// universally be changed to something like 'n'.
if (obj instanceof SomeObject) {}
(BTW, 여기에 다른 가치있는 답변에 대해 언급하려면 더 높은 평판이 필요합니다)
SeanJA가 게시 한 http://phpjs.org/functions/get_class/ 에서 훔친 아이디어 . 정규 표현식이 필요하지 않고 객체로만 작업하도록 찢어졌습니다.
function GetInstanceType(obj)
{
var str = obj.constructor.toString();
return str.substring(9, str.indexOf("("));
}
function Foo() {
this.abc = 123;
}
// will print "Foo"
GetInstanceType(new Foo());
방금 생성자에서 함수 이름을 추출하는 더 쉬운 방법을 배웠습니다.
obj.constructor.name
php.js에서 수행하는 방식을 살펴볼 수도 있습니다.
http://phpjs.org/functions/get_class:409
instanceof가 정답이지만 확실히 추악한 구문입니다. 사용자 지정 개체를 만드는 경우 유형에 대한 고유 한 속성을 추가하고 이와 같이 확인할 수 있다고 제안합니다.
var Car = function(){
this.type = Object.defineProperty(this, "type", {value:"Car"});
}
이것은 객체와 함께 존재하는 type이라는 불변 속성을 생성합니다. Class 구문을 사용한다면 정적으로 만들 수도 있습니다.
... 나중에 어딘가에 ...
function addCar(car){
if (car.type != "Car"){
throw Error("invalid type for car");
}
...
이 솔루션은 구현하기 쉽고 직관적이므로 다른 사람들이 사용하고 유지하기가 더 쉽다고 생각합니다.
참조 URL : https://stackoverflow.com/questions/1486300/javascript-type-of-custom-object
'programing' 카테고리의 다른 글
버튼의 텍스트와 아이콘의 수직 정렬 (0) | 2021.01.14 |
---|---|
사용자 정의 개체의 addEventListener (0) | 2021.01.14 |
JavaScript Object Literal에 프로토 타입 추가 (0) | 2021.01.14 |
Eclipse 3.5에서 편집기 탭 너비 변경 (0) | 2021.01.14 |
유니 코드 속성과 일치하는 Python 정규식 (0) | 2021.01.14 |