2012-07-10 2 views
3

자바 스크립트 뒤에있는 프로토 타입을 더 잘 이해하기 위해 다음과 같은 것을 발견했습니다. 지금까지는 이해할 수 없었습니다.Function.prototype.propertyname === Object.propertyname이 true입니까?

나는 기능은 제 클래스 객체 것으로 알고 있습니다,하지만 난하지 착각 같이 Function.prototype이 인입니다 경우 개체 같이 Function.prototype

Function.prototype.foo = 'bar'; 

Object.foo // Object now has this property and returns 'bar' 

Object.foo === Function.prototype.foo // returns true 

답변

3

Objecttypeof Object == 'function'이 참입니다. 따라서 Function.prototype의 속성을 할당하면 Object 속성도 가질 수 있습니다. (속성 체인에서)

+0

그리고 여기 나는 Object가 객체라고 생각했습니다. 이것으로 해결됩니다. 고마워요! –

+0

@ChrisM :'Object' *는 객체입니다. 'Object instanceof Object; // true'보다 구체적으로, 그것은'Function' 객체입니다. '객체 instanceof 함수; // true'. 자바 스크립트에서 함수는 객체입니다. –

2

의 속성을 설정 한 후이 속성을 가져옵니다 내가 왜하지 않습니다 모든 상속 된 객체의 프로토 타입. Function.prototype.foo = 'bar';을 설정했기 때문에 모든 개체는 foo 속성을 상속받습니다. 그래서 세 번째 코드 줄이 true를 반환합니다.

+1

그건 옳지 않습니다. 'Function.prototype'은 모든 객체가 아니라 모든'Function' 객체의 프로토 타입입니다. 함수 만'foo' 속성을 상속받습니다. –

+1

교정 해 주셔서 감사합니다. 그 말은 제가 대답하려고 한 것입니다. – reagan

+0

@ reagan- 그래서 답을 수정하십시오. – RobG

1

ObjectFunction 개체는 동일한 내부 [[Prototype]] 속성을 공유하기 때문입니다. ECMA-262로

말한다 :

함수 원형 오브젝트의 내부 [원형] 속성 값이 개체 프로토 타입 객체이다. 당신이 Function의 프로토 타입에 어떤 속성을 추가 할 경우

그래서, 그 속성은 그 반대의 경우도 마찬가지 너무 Object 개체를 통해 액세스 할 수 및 것입니다.

깊이 이해하고 싶다면 Ecma-262 Specification을 살펴 보시기 바랍니다.

희망이 있습니다.

+1

다음 참조가 도움이 될 수 있습니다 : [개체 생성자의 속성] (http://es5.github.com/#x15.2.3), [Function Prototype Object의 속성] (http://es5.github.com/ # x15.3.4) – RobG

관련 문제