2014-10-09 2 views
1

저는 자바 스크립트를 배우면서 객체가 이름/값 쌍의 모음임을 이해합니다. 예를 들어, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects함수 개체는 어떻게되지만 이름/값 쌍이 아닌가요?

An object is a collection of properties, and a property is an association between a name and a value.

에서 직접 촬영 그리고 기능도 오브젝트 것을 알고있다. 예를 들어, 내가 할 수있는 :

function myFunc() { return "I'm a function"; } 
myFunc.name = "Bob"; 

myFunc.name 

은 "밥"을 인쇄합니다.

myFunc 

은 이름/값 쌍하지 않은

function myFunc() { return "I'm a function"; } 

인쇄 할 그러나

; 그것은 함수입니다.

내가 좋아하는 뭔가를했다면 반면 :

var myObj = { prop1: "hello", prop2: "world" } 

myObj 

그래서 내가 조금 기능이 오브젝트가와 개체는 이름/값 쌍 모음입니다 것을 조정하는 방법에 대해 혼란 스러워요

Object {prop1: "hello", prop2: "world"} 

를 인쇄합니다 , 함수는 이름/값 쌍의 콜렉션이 아닙니다.

+3

객체에는 객체를 문자열로 렌더링하는 방법을 제어하는'.toString()'속성이 있습니다. 또한 개발자 콘솔은 원하는대로 할 수 있습니다. 함수는 사실 실제 객체입니다. 객체의 본질은 문자열로 변환되거나 콘솔로 덤프 될 때 어떤 모습으로 보이는지에 달려 있지 않습니다. – Pointy

+0

그러나 콘솔에 표시되는 방식을 무시합니다. 나는 여전히 "함수는 객체이고 객체는 이름/값 쌍의 집합"이라는 것을 이해하지 못합니다. 어떻게 함수 -> 이름/값 쌍을 볼 수 없습니다. – dursk

+1

@mattm'var foo = function() {}; foo.keyName = "value";'foo'가 이름/값을 가진 속성을 갖게합니다. 원하는만큼 속성을 추가하여 이름/값 쌍의 컬렉션을 만들 수 있습니다. – apsillers

답변

3

나는 그것이 좋은 질문이라고 생각한다. 함수와 객체 사이의 구분은 핵심적으로 퍼지 개념처럼 보일 수 있지만 "객체는 키와 값의 모음입니다"라는 정의를 사용하여 객체에 대한 함수를 생각하지 않는 것이 좋습니다.

W3C objects article 및 (특히) W3C function article 을 확인하여 함수가 실제로 호출되지 않고 개체가 아닌 것을 확인할 수 있습니다.

나는 함수의 경우가 객체가 단순히 "속성의 모음이 아니라 속성이 이름과 값의 연관성"이상으로 인식 될 수 있다고 생각하지만 사실 실제로는 . 나는 그것의 개체 특성에 관한 기능에 대한 제안 것

정의입니다 :

기능 주 일반 객체의 모든 기능, 그러나에 반응 할 수 있다는 사실에 특별한 객체이다 "()"연산자, 이 함수의 내부 논리를 평가합니다.