2012-03-16 2 views
3

필자가 이해 하듯이 Function의 프로토 타입 속성은 해당 함수에서 인스턴스화 된 모든 객체에 메서드/속성을 추가하는 방법입니다.Function.prototype.x를 선언 한 후에 Function.x가 작동하는 이유는 무엇입니까?

그래서 내가 오류를 얻을이

function Person(){} 
Person.prototype.saySomething = function(){ alert("hi there"); } 

Person.saySomething(); 

뭔가를하려고 할 때 임 Person 객체 인스턴스의 기능을 실행하지 의미가 있습니다 "Person.saySomething는 함수가 아닙니다."

하지만 아래 코드를 실행하는 것이 왜 효과가 있습니까? new 키워드를 통해, 생성자의 인스턴스가 생성 될 때

new Person().saySomeThing(); 

프로토 타입 방법/속성은 상속됩니다

Function.prototype.sayHi = function(){ alert("hi!");} 

Function.sayHi(); 
+0

아마도이 예제를 예로 들었을 것입니다.하지만 네이티브 프로토 타입을 프로토 타입하는 것은 좋지 않은 아이디어입니다. – jbabey

+0

나는 이해한다. 어떤 프레임 워크에서 그것을 보았고 어떻게 작동하는지 궁금해했다. – levi

+1

@bbabey : 언제 나쁜 생각일까요? 항상? 나는 반대해야한다. –

답변

5

는 먼저 Person의 인스턴스를 만들어야합니다.

Function.sayHi()Function 생성자가 이기 때문에 작동합니다.

+0

나는 '함수'예제가 효과가 있었던 이유를 생각할 수 없었다. 좋은 전화, 아주 영리하다. 만약 당신이 진정으로 혼란에 빠지기를 원한다면'Person' 생성자를'Function' 예제와 함께 넣으면'Person.sayHi()'도 역시 작동 할 것입니다 ... – jondavidjohn

+0

"함수 생성자는 함수이기도합니다." 먼저 인스턴스화에 대한 첫 번째 요지는 알지만 두 번째 인스턴스에는 "새로운"이유가 무엇입니까? – levi

+0

@levi 간단히 설명하면 다음과 같습니다. 'Function'은 'function Function() {[native code]}'로 간주 할 수 있습니다. 모든 함수 인스턴스 ('function() {}')는'Function.prototype'을 상속하므로'Function' 생성자도 영향을받습니다. 'Function'이 참으로'Function'의 인스턴스인지 확인하기 위해 : **'Function instanceof Function' **은'true'입니다. –

관련 문제