2009-12-09 3 views
7

자바 스크립트 기능이 같은 객체의 프로토 타입에 선언 할 수 있습니다 :프로토 타입 함수가 javascript의 일반 함수와 다른 점은 무엇입니까?

<object name>.prototype.<variable name>=function(){ 
// 
// 
} 

어떻게 선언을 다음 다른이?

<object name>.<variable name>=function(){ 
// 
// 
} 

프로토 타입 기능이 정상적인 기능과 어떻게 다른가요?

+1

하십시오 다시 문구가 많이 있습니다. – gahooa

+3

@ gahooa : 왜이 ​​질문에 답할 수 없다고 생각하십니까? 매우 높은 수준 일지 모르지만 여전히 문제입니다. 당신은 그것을 언제나 더 명확하게 편집 할 수 있습니다. 문법적인 실수로 인해 간단히 투표 할 필요가 없습니다 ... – Josh

+0

http://stackoverflow.com/questions/186244/what-does-it-mean-that-javascript-is-a-prototype-based-language –

답변

7

기본 개체의 프로토 타입에 선언 된 함수는 해당 개체 유형의 모든 인스턴스에 상속됩니다. 예를 들어

.. 이제

String.prototype.foo = function() { 
    return 'bar'; 
}; 

, 사용할 수있는 함수 foo를해야합니다 모든 문자열(). 정상적인 기능이 "정적"함수입니다 동안

'test'.foo(); // returns 'bar'

프로토 타입 기반 상속 here

+2

+1 또한 명시 적으로 그 가치가 그 기능을 객체의 프로토 타입에 선언 된 * 및 속성은 해당 객체의 모든 인스턴스에 상속됩니다. * 이미 인스턴스화 된 객체도 상속됩니다. * –

+0

예, 좋은 지적입니다. 마지막 부분은 매우 중요합니다. 프로토 타입은 멤버가 '정의되지 않은'것으로 간주되기 전에 마지막 catch로 다소 작용합니다. 따라서 프로토 타입을 수정하면 기존 객체에도 영향을줍니다. – Matt

16

프로토 타입 기능에 대해보다 자세히는, 인스턴스 함수입니다. 클래스의 프로토 타입에 선언 된 함수는 해당 클래스의 모든 인스턴스에서 사용할 수 있습니다.

var MyClass = function(){ 
}; 
MyClass.staticFunction = function(){alert("static");}; 
MyClass.prototype.protoFunction = function(){alert("instance");}; 

MyClass.staticFunction(); //OK 
MyClass.protoFunction(); //not OK 

var myInstance = new MyClass(); 
myInstance.staticFunction(); //not OK 
myInstance.protoFunction(); //OK 
+2

+1 내가 본 가장 간결한 설명입니다. –

0
매트와 이고르 이미 충분히 코드 샘플을 제공 한

, 그러나 당신이 읽을 수있는 최고의 제품 (단, 정확하고 지점) 중 하나 인 더글러스 크록 포드에 의해, Prototypal Inheritance입니다.

도 대답 할 수있는 진짜 문제로 다른 인기있는 라이브러리를 통해 상속을 용이하게하는 방법 (Dojo, Prototype를, 등)