2016-08-04 2 views
0

Javascript의 프로토 타입에 대한이 모든 개념에 새로 추가되어 혼동 될 수 있습니다.Javascript 프로토 타입, 프로토 타입 함수에 액세스하는 방법

var Widget = function (options) { 
    // constructor code here 
} 

Widget.prototype.constructor = Widget; 
Widget.prototype.myGreatFunction = function(){} 

내가 Widget.myGreatFunction();를 호출 할 수 있어야 또는 내가 큰 기능을 실행할 수 Widget.prototype.myGreatFunction()?를 호출해야 할 :

이의 내가 정의 위젯라는 클래스를 가지고 있다고 가정 해 봅시다?

+4

사이드 노트 :'Widget.prototype'의'constructor' 속성은 * 이미 * Widget''을 의미한다. 'Widget.prototype.constructor = Widget; '은'Widget.prototype'이 참조하는 객체를 대체하지 않는 이상 필요 없습니다. –

+0

해명 해 주셔서 감사합니다. 이 물건은 다른 언어와 많이 다르지만 아주 멋집니다. –

답변

2
:

var w = new Widget(); 
w.myGreatFunction(); 

또한 프로토 타입을 통해 참조하여 기능을 사용할 수 있습니다

이렇게하는 이상적인 방법은 인스턴스를 만들고 프로토 타입 함수를 사용하는 것입니다. 그러나 함수가 Widget.prototype.myGreatFunction에 저장되어 있으므로 확실히 액세스 할 수 있습니다.

프로토 타입에 정의 된 기능은 공유 리소스이며이 방식으로이 기능을 사용하는 것이 가장 큰 이점입니다.

var Widget = function (options) { 
 
    // constructor code here 
 
} 
 

 
Widget.prototype.constructor = Widget; 
 
Widget.prototype.myGreatFunction = function(i){console.log('myGreatFunction', i);}; 
 

 
var a = new Widget(); 
 
a.myGreatFunction(1); 
 

 

 
var b = new Widget(); 
 
b.myGreatFunction(2);

3

당신이 인스턴스를 만들기 위해 생성자 함수를 사용하는 경우, 당신은 거기에서 기능을 사용할 수 있습니다

Widget.prototype.myGreatFunction(); 
+0

Gotcha, 그건 의미가 있습니다. 내가 겪고 있던 문제는 생성자에서 함수에 액세스하는 것이 었습니다. 나는 거기에 ".prototype"을 넣어야하는지 확신 할 수 없었다. –