programing

사용자 정의 개체의 자바 스크립트 유형

javaba 2021. 1. 14. 23:04
반응형

사용자 정의 개체의 자바 스크립트 유형


내 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

반응형