2015-05-01 48 views
0

我在寫一些客戶端Javascript,我想呈現一些標籤和表格。這是相關代碼:javascript執行錯誤的函數

(function() { 

    var Table = function() { 
     this.render = function() { 
      console.log('rendering table'); 
     }; 
     return this; 
    }; 

    var Tabs = function() { 
     var table = Table(); 
     this.render = function() { 
      console.log('rendering tabs'); 
      table.render(); 
     }; 
     return this; 
    }; 

    (function() { 
     var tabs = Tabs(); 
     tabs.render(); 
    })(); 

})(); 

我期待什麼:控制檯應該顯示rendering tabsrendering table,並用它做。

究竟發生了什麼:控制檯顯示成千上萬的rendering tabs,直到jsFiddle崩潰。

這表明table.render()實際上是遞歸調用tabs.render()。但爲什麼?我發現這種行爲相當令人費解,有人可以解釋我的錯誤在哪裏嗎?

+1

使用'新標籤()'和'新表()' –

回答

1

你的錯誤是你調用Tabs方式:

var tabs = new Tabs(); 
tabs.render(); 

而且Table

var table = new Table(); 

原因您的問題是,this指全局對象(window)當函數沒有用new運算符調用。 Tabs的第一件事是打電話Table,並且都設置this.render。當調用new時,每個將有其自己的上下文,因此它自己的render方法。

+0

完美,謝謝!我現在還添加了''嚴格使用';'在我的文件的最上面警告這些問題。 – modemuser