2017-02-12 26 views
0

我宣佈一個新的對象,因爲它遵循:爲什麼在函數中使用這個對象導致Javascript TypeError(undefined)引發?

function node(){ 
       this.tag  = null; 
       this.Tdata  = []; 
       this.Tchilds = []; 
} 

我想在函數中使用這個對象:

function Check(root /*I want to use root as type node*/) { 
     for(var i = 0; i < root.Tdata.length; i++){ 
       if(root.Tdata[i] == -1) 
         arg++; 
     } 
} 

的瀏覽器說:TypeError: root.Tdata is undefined

當我聲明一個變量(出功能的範圍)var root = new node(); &我使用root.Tdata[]一切工作正常。

那麼我該如何在函數中使用這個對象呢?

編輯:
在函數調用我所做的:

var rootExt = new node(); 
    rootExt.Tdata[0] = -1; 
    rootExt.Tchilds[0] = -1; 

    Check(rootExt); 
+3

你是怎麼調用'Check'函數的?我已經測試了你的代碼,如下所示:'Check(new node());'它按預期工作。 – maddockst

+0

你應該閱讀關於新操作符的文檔.. [這裏](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new) – puemos

+2

你應該將對象傳遞給函數,如果我正確地理解了你的問題,請檢查(新節點());' –

回答

3

您需要使用new操作實例化一個Node對象,然後將該實例化對象傳遞給check函數的調用:

function Node() { 
    this.tag = null; 
    this.Tdata = []; 
    this.Tchilds = []; 
} 

function check(root) { 
    for(var i = 0; i < root.Tdata.length; i++) { 
    if(root.Tdata[i] == -1) { 
     arg++; 
    } 
    } 
} 

var rootNode = new Node() //instantiate a new Node 
check(rootNode) //invoke check function with rootNode as argument 
+0

從哪裏來的arg ++? – abc123

+0

未知 - 它在原始代碼中引用;但是,不要認爲它與手頭的問題有關 – hackerrdave

-2

你可以這樣做:

var root = { 
    tag: null, 
    Tdata: [], 
    TChild: [] 
} 



function Check() { 
     for(var i = 0; i < root.Tdata.length; i++){ 
       if(root.Tdata[i] == -1) 
         arg++; 
     } 
    } 
+0

但我需要聲明類型節點的其他變量! –

相關問題