2012-10-18 82 views
4

我試圖訪問一個類,這是一類的成員函數的陣列的成員變量,但得到一個錯誤:的Javascript:訪問一類的成員變量(陣列)中的成員函數

Can not read property 'length' of undefined

類別:

function BasicArgs(){ 
    var argDataType = new Uint8Array(1); 
    var argData = new Uint32Array(1); 
} 

成員函數:

BasicArgs.prototype.getByteStreamLength = function(){ 
    alert(this.argData.length); 
    return i; 
} 

這是例子之一,但我今天來ACROS這在很多地方都是這樣。像整數這樣的變量很容易被訪問,但是大部分時間問題都與數組有關。 幫助,將不勝感激。

回答

3

您需要this在構造函數中創建對象的屬性。

function BasicArgs(){ 
    this.argDataType = new Uint8Array(1); 
    this.argData = new Uint32Array(1); 
} 

原型函數無法直接訪問構造函數的變量範圍。

然後一定要用new來調用構造函數。

var ba = new BasicArgs(); 

ba.getByteStreamLength(); 
+0

謝謝。這真的很有幫助。 –

+0

不客氣。 –

0

您可以訪問的功能

修改後的代碼的私有變量:

function BasicArgs(){ 
     this.argDataType = new Uint8Array(1); 
    this.argData = new Uint32Array(1); 
    } 

    BasicArgs.prototype.getByteStreamLength = function(){ 
     alert(this.argData.length); 
     return i; 
    } 
0

聲明var argData不創建對象的屬性。它只是創建一個局部變量,一旦構造函數退出就會消失。你需要做的

this.argData = new Uint32Array(1)

代替。

+0

感謝大家。這真的很有幫助。 –

+0

不完全正確。該變量將仍然存在,但不能在構造函數的作用域外訪問。 – Shmiddty