2009-06-26 13 views
0

왜 이것이 좋지 않은가요?왜 xxx는 함수가 아닙니다.

aContract = function(){}; 
aContract.prototype = { 
    someFunction: function() { 
     alert('yo'); 
    }, 
    someOtherFunction: some$Other$Function 
}; 

var some$Other$Function = function() { 
    alert('Yo yo yo'); 
}; 

var c = new aContract(); 
c.someFunction(); 
c.someOtherFunction(); 

방화범이 c.someOtherFunction 함수

아니다 그러나 이것은 잘 작동 말한다

aContract = function(){}; 
aContract.prototype = { 
    someFunction: function() { 
     alert('yo'); 
    }, 
    someOtherFunction: some$Other$Function 
}; 

function some$Other$Function() { 
    alert('Yo yo yo'); 
}; 

var c = new aContract(); 
c.someFunction(); 
c.someOtherFunction(); 

내가 무슨 말이냐 ??? 나는 일반적으로 잘 작동하는 첫 번째 방법을 사용하여 자바 스크립트에서 코드를 선호하지만 프로토 타입을 만들 때 제대로 작동하지 않는 것 같습니다. 당신이 실제로 some$Other$Function를 만들기 전에 샌디 Eggo

답변

3

에서

감사합니다, 가 ~ CK 당신은 aContract.prototype.someOtherFunctionsome$Other$Function을 할당했다. 성명서의 순서가 중요합니다. 당신이 일의 순서를 전환하면 당신은 좋은거야이 아직 평가되지 않았습니다

aContract.prototype = { ... } 

: 따라서

var some$Other$Function = function() { ... } 

aContract.prototype.someOtherFunction이 평가시

var some$Other$Function = function() { 
    alert('Yo yo yo'); 
}; 

aContract = function(){}; 
aContract.prototype = { 
    someFunction: function() { 
     alert('yo'); 
    }, 
    someOtherFunction: some$Other$Function 
}; 
4

undefined으로 설정됩니다.

함수 선언 (두 번째는 첫 번째 표현식 임)이 다른 명령문보다 먼저 평가되기 때문에 두 번째 작동 이유가 있습니다. 여기에 자세한 내용이 있습니다. Named function expressions demystified

0

전역 범위에서 var은 함수 - 로컬 범위와 다르게 작동하는 것으로 보입니다. 함수 로컬 범위에서 var - 선언 된 변수가 함수의 맨 위로 올라옵니다 (즉, 키워드 var이있는 함수 내에서 선언 된 변수는 해당 함수 내 다른 곳에서 사용 가능함). 그러나 전역 범위에서 변수를 선언하는 데 function 키워드 만 사용하면 동일한 결과가 산출됩니다 (즉, function 키워드로 선언 된 변수는 해당 전역 범위 내의 모든 위치에서 사용할 수 있으며 해당 선행 선행에서도 가능합니다).

+0

. blah()를 호출하면 "정의되지 않음"이 표시됩니다. function blah() { alert (x); var x = 5; } –

+0

그게 무슨 일 이니? 예. (function() {var a = x + 1; var x = 2; return a;})()는 NaN을 반환합니다. (function() {var a = function() {return x + 1}; var x = 2; return a()})() 이는 3을 반환합니다. – BaroqueBobcat

1

호이 스팅 때문입니다. 함수 명령문은 범위의 맨 위로 이동됩니다.

편집 : 검증 크록 포드의 자바 스크립트 : 전혀 사실이 아니다 좋은 파트 페이지 113

관련 문제