2010-11-19 3 views
0

이 클래스를 정의하고 나중에 인스턴스화하고 메소드 중 일부를 호출하려고한다.I 자바 스크립트에서 어떤 객체의 메소드도 호출 할 수 없다.

function Layer(){ 
    this.image = null; 
    this.owned = false; 
    this.sim = false; 
    this.pos = 0.5; 
    this.vel = 0; 
    this.acc = 0; 
    this.lastup = millis(); 
    this.newpos = 0; 

    this.scrub = scrub; 
    function scrub(npos){ 
     this.newpos = npos; 
     this.vel = 0; 
     this.acc = 0; 
    } 
} 

dummy = new Layer(); 

dummy.scrub(0.8); 
// chrome says Uncaught TypeError: Object #<an Object> has no method 'scrub' 

정확하게 정의 할 수 있습니까?

+3

이 this.scrub = 스크럽을 삭제; – Chris

+0

'millis'는 어디에 정의되어 있습니까? –

+5

@Chris - 오류가 * 발생할 수 있습니다. –

답변

2

메서드를 올바르게 정의하지 않았습니다. 대신에 :

this.scrub = scrub; 
function scrub(npos){ ... } 

이 있어야한다 :

this.scrub = function(npos){ ... } 

또는 당신은 단순히 전부 this.scrub = scrub; 라인을 제거 할 수있다.

+0

그게 내가 내 의견에 의미했던 것, 그 혼란을 유감스럽게 생각합니다. – Chris

+0

왜 잘못 되었습니까? 먼저 (인터프리터에 의해) 함수 선언이 정의되고,'this.scrub'는 선언 된 함수에 대한 참조가 할당됩니다. – user113716

+0

@ Justin 그러나 만약 그가 * 단지 * 선을 없애 버린다면, 여전히 스크럽은 개인적인 기능이 될 것이고 따라서 메소드로서 호출 할 수는 없습니다. 'this.scrub = function() {}'은 호출 가능 메소드로 만들기 위해 필요합니다. –

1

이 당신이 그들에게 "외부에서"호출 할 수 있도록하려면 함수를 정의해야하는 방법이다 :

this.scrub = function(npos) { ... } 
+0

그게 사실 그가 한 일입니다. – user113716

+1

아니요, 다른 모든 사람들과 마찬가지로 잘못되었습니다. – lincolnk

+0

@lincolnk 이것은 특권이 부여 된 메소드입니다 - http://www.crockford.com/javascript/private.html –

관련 문제