2014-12-27 4 views
0

저는 작은 웹 사이트를 만들고 있는데 자바 스크립트를 사용해야합니다. 프로토 타입 기능에 문제가 있습니다. 몇 가지를 테스트하고 있었고 페이지가로드 될 때마다 항상 내 함수의 프로토 타입이 실행된다는 것을 깨달았습니다. 이 코드는 다음과 같습니다.Javascript 프로토 타입 함수는 항상로드합니다.

function Clinica() 
{ 
var id = 0; 
var doentes = []; 


} 

Clinica.prototype.criarDoente = new function() 
{ 
     alert("HELLO"); 
} 

경고는 테스트 용입니다. 지금 나는이 HTML을 가지고있다 :

<form id ="criarDoenteForm" onsubmit = javascript: "criarDoente();" > 

<label> Número: </label> 
<label id ="numero"> </label> 
</br> 

<label> Nome: </label> 
<input type="text" size="20" /> 
</br> 

<label> Sexo: </label> 
<input id="masculino" name="sexo" type="radio" value="m" /> 
<label for="masculino" class="valores">Masculino </label> 


<input id="feminino" name="sexo" type="radio" value="m" /> 
<label for="feminino" class="valores"> Feminino </label> 
</br> 

<label> Data de Nascimento: </label> 
<input type="text" size="10" /> 
</br> 

<input type="submit" value="Criar" /> 
<input type="submit" value="Cancelar" /> 


</form> 

그래서 내가 제출 버튼을 클릭하면 기능을 실행한다. 하지만 항상 페이지를 새로 고침하거나 열 때마다 항상로드됩니다. 왜 이런거야 ?

+1

사용하지 않는'new' :

var f = function() { alert("HELLO"); }; Clinica.prototype.criarDoente = new f; // <-- this will execute the function // even without parentheses 

그래서 그냥 new을 제거 :

Clinica.prototype.criarDoente = new function() { alert("HELLO"); } 

은 본질적으로 같은 효과를가집니다 그것으로. –

답변

1

Daniel A. White이 지적했듯이 new이 문제입니다.

함수 앞에 new을 배치하면 해당 함수가 실행되어 새 개체의 생성자로 사용됩니다. 이 함수를 호출 할 괄호가없는 경우에도 발생합니다.

당신 여기서 뭐하는 :

Clinica.prototype.criarDoente = function() 
{ 
     alert("HELLO"); 
}; 
+0

오, 신인이 얼마나 실수인지. 나는 왜 Clinica 객체를 사용하지 않고 Clinica Methods를 사용할 수 있는지 스스로에게 묻고있었습니다. 자바 스크립트에는 클래스가 없다는 것을 알지만, 이것이 당신이 "시뮬레이션"할 수있는 방법이라고 들었습니다. –