2010-11-19 18 views
0

'da herhangi bir nesnenin yöntemini çağıramıyor Bu sınıfı tanımlamaya çalışıyorum ve daha sonra bunu başlatıp bazı yöntemlerini çağırıyorum.I Javascript

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' 

Yöntemleri doğru tanımlarım mı?

+3

this.scrub = bodur silmek; – Chris

+0

'Millis' nerede tanımlandı? –

+5

@Chris - bu hataya * sebep olur. –

cevap

2

Yönteminizi doğru tanımlamıyorsunuz. Onun yerine:

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

Olmalıdır:

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

Veya sadece tamamen this.scrub = scrub; çizgi kurtulmak başladı.

+0

Bu benim yorumumda kastettiğim şey, karışıklık için üzgünüm. – Chris

+0

Neden yanlış olur? İşlev bildirimi önce (yorumlayıcı tarafından) tanımlanır, daha sonra 'this.scrub' bu bildirilen işleve bir başvuru atar. – user113716

+0

@Justin Ama eğer * sadece * çizgiden kurtulursa, o zaman ovalama hala özel bir işlev olur ve bu nedenle bir yöntem olarak kalınabilir değildir. this.scrub = function() {} ', çağrılabilir bir yöntem haline getirmek için gereklidir. –

1

Bu karşıdakinin "dışarıdan" çağrılabilir olmak istiyorsanız işlevleri tanımlamak zorunda nasıl:

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

Bu etkili bir şekilde yaptı. – user113716

+1

Hayır, herkes kadar yanlış. – lincolnk

+0

@lincolnk Ayrıcalıklı bir yöntem olarak adlandırılır - http://www.crockford.com/javascript/private.html –