2014-07-18 10 views
0

JavaScript에서 객체의 클래스를 결정하는 가장 좋은 방법은 무엇이 될 수 있습니다. 'o'객체의 클래스를 결정해야한다면 ...자바 스크립트에서 객체의 클래스를 결정하십시오.

function findClass(o){ 
     return Object.prototype.toString.call(o).slice(8,-1); 
} 

하지만 우리는 사용자 정의 클래스가있을 때이 방법이 도움이되지 않습니다.

+0

자바 스크립트에서 모든 것이'Object'입니다. – Arjuna

+0

그것은 함수의 인스턴스일까요? [instanceof] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof)? – CodingIntrigue

+0

@kviiri 예 알아요 ....하지만 내 질문을 알지 못 했어. – nyxem1

답변

0

자바에서 객체를 쉽게 찾을 수는 없습니다.

proto.isPrototypeOf
  • obj.constructor
  • instanceof를 대해서 typeof : 자바 스크립트는 프로토 타입 기반 언어입니다,하지만 당신은 여전히 ​​클래스를 결정하는 몇 가지 방법을 가지고 있기 때문이다

    예 :

    function Foo() {} 
    var foo = new Foo(); 
    
    typeof Foo; // == "function" 
    typeof foo; // == "object" 
    
    foo instanceof Foo; // == true 
    foo.constructor; // == Foo 
    
    Foo.prototype.isPrototypeOf(foo); // == true 
    
    +0

    예 .. 나는 거의 모든 것에 대해 연구했습니다. 그것은 오리 입력에 – nyxem1

    0

    둘 다 동일한 프로토 타입 객체 에서 상속하는 경우 두 객체가 같은 클래스에 속합니다.

    맞춤 클래스를 처리 할 때 클래스 검사를 효과적으로 수행하려면 (위 Ivan Grgurevic에서 제안한 것처럼) 명시 적으로 설정하고 proptotype에 대해 알려주는 것이 매우 중요합니다.

    예 :

    지금
    // Class constructor 
    function CustomClass(type) { 
        // CODE 
    } 
    
    // prototype, all CustomClass objects inherit form this object 
    Sedcard.prototype = { 
        constructor: CustomClass, // explicit set constructor, backwards reference 
        // Class method 
    }; 
    

    당신이 safetly 같은 검사를 사용할 수 있습니다 대해서 typeof, instanceof를하고 Foo.prototype.isPrototypeOf (foo는)

    비록처럼 직접,이 JS에 매우 어려운 주제입니다 JS book "Javascript, 최종 가이드"http://shop.oreilly.com/product/9780596805531.do과 같은 강좌를 통해 작동 방식을 깊이 이해할 것을 권장합니다. 에서는 CustomClass instanceof를

    R : instanceof 연산자가 실제로 r은 생성자에 의해 초기화 여부를 확인하지 않습니다

    는이 주제에 대한 자세한 비트. 프로토 타입을 에서 상속하는지 여부를 확인합니다. 그럼에도 불구하고 구문의 instanceof는 클래스의 공개 ID로 생성자의 사용을 강화합니다.

    o instanceof c의 표현식은 o가 c.prototype에서 상속되면 true로 평가됩니다. 상속은 직접적 일 필요는 없습니다. o가 개체를 상속 한 경우 c.prototype에서 상속 한 개체 을 상속 한 개체는 여전히 true로 평가됩니다.

    두 인용문은 내가 추천 한 이전 책에서 인용 한 것입니다.

    +0

    결국 내가 원하는 걸 가까이에 있지만 마지막 견적을 직접 복사 한 일부 참조 r, o, c 명확하지 않습니다. 귀하의 참조가 그 책에서 나온 것으로 알고 있지만 예제 코드도 제공해야합니다. 노력해 주셔서 감사합니다. – nyxem1

    +0

    예, 맞습니다. 첫 번째 인용문에 예제를 추가하는 것을 잊어 버렸습니다. 두 번째 예제에서는 무작위로 명명 한 예제입니다. 객체 -> 클래스 -> c – avcajaraville

    관련 문제