2014-12-24 2 views
0

내 noobidity 실례 객체 instanceof를,하지만 난 정말 다음을 이해하지 않습니다자바 스크립트 객체는

Function instanceof Object 

true를 반환합니다. 승인. 나는 이해한다. 그래서 Function는 사실 개체 다. 오히려 모든 함수의 생성자입니다. 따라서 함수를 만들 때 prototype 자체가 객체이고 해당 객체의 생성자가 prototype 인 객체를 만듭니다. 그리고 어떤 객체도 Object 생성자를 통해 생성되기 때문에 Object에서 상속됩니다.

왜뿐만 아니라 반환 true

Object instanceof Function 

합니까?

+1

'Object'는 객체의 생성자입니다. 함수입니다. –

+0

이 [답변] (http://stackoverflow.com/questions/23622695/why-in-javascript-both-object-instanceof-function-and-function-instanceof-obj) 실제로 왜 이런 일이 발생하는지 설명합니다. – Anurag

답변

4
Object instanceof Function 

는 true를 돌려줍니다. 그것은 객체 생성자입니다.

으로 전화하십시오.
Object({}) 

기능처럼 보입니다.

같은 맥락에서
Object.call(0, {}) 

,

Number instanceof Function // true 
String instanceof Function // true 

혼란이 Object instanceof Function 객체 함수의 인스턴스 것을 의미 있다고 생각하는 자연적인 경향에서 발생할 수있는하십시오 call 방법과 모든 것을 갖추고 있습니다. 아니, 객체는 함수의 인스턴스 아니며, Object instanceof Function는 것을 의미하지 않는다, 그것은 이름이 Object입니다 매우 특정 값이 Function의 인스턴스 것을 의미한다. Number 숫자 유형에 대한 생성자라는 특정 오브젝트가 함수의 인스턴스이다 때문에 Number instanceof Function 숫자 함수의 인스턴스라는 것을 의미하지 않으며, 그것은 의미

Number(1) 
그것은에 명확하게 할 수있다

참고 : String 생성자가 문자열이 아니기 때문에

String instanceof String // false 
Date instanceof Date // false 

으로 표시됩니다. 이는 함수입니다.그러나

,

Function instanceof Function // true 

당신은 분명 생각 할 수 있지만 "함수는 함수는"때문이 아니다 - Function 객체 (기능) 생성자 함수이기 때문에 그것입니다. 마찬가지로

Object instanceof Object // true 

으로

또한 명백한 것처럼 보일 수 있지만, "객체는 객체가"때문에 하지을하지만 Object 이름 값 때문에 다시 객체 함수입니다.

+0

그래서 ... 함수를 만들면 실제로 객체 함수를 만듭니다. 그리고 그 객체 함수는 프로토 타입을 가지고 있습니다. 그리고 그 프로토 타입은 하나의 목표입니다. 그리고 생성자를 보유하고 있습니다. 초기화 할 모든 데이터가 있습니다.하지만 이제는 함수 함수가 이상하다는 것을 알고 있습니다. 그것은 자신의 프로토 타입을 생성하기 때문에 (다른 모든 함수가 그렇듯이 의미가 있습니다), 프로토 타입을 상속받습니다. 그리고 큰 것 : Object, Array, Number, String을 포함한 다른 함수는 이것으로부터 상속받습니다. 반면에 프로토 타입은 Object에서 상속받은 객체입니다. 권리? 감사합니다. . –

+0

그래서 Object에는 함수가 수행하는 모든 메소드가 있습니다. 그래서 모든 프로토 타입에는 객체가있는 모든 것이 있습니다. 모든 생성자가 함수 객체의 prototype 속성에서 발견된다고 말하는 것이 안전합니까? 모든 생성자는 각각의 함수 객체를 가리 킵니다. –

+0

OP의 질문에 대한 설명은이 [대답] (http://stackoverflow.com/questions/23622695/why-in-javascript-both-object-instanceof-function-and-function-instanceof-obj)을 참조하십시오. – Anurag

0

Object, Array, String 등의 모든 내장 생성자는 함수입니다. 그래서 Object instanceof 함수는 true를 유지해야합니다.

이제 obj = new Object()를 시도해보십시오.

다음

하여 obj instanceof를 기능

... 당신이 지금 가지고있는 것은 함수 나 생성자하지만 객체가 아닌 있기 때문에, 거짓 일 것이다. ObjectFunction의 인스턴스이기 때문에