2015-12-22 28 views
0

當ejs文件編譯時,它變成了一個javascript函數。例如,該EJS文件編譯後的jst模板中的「this」是什麼

<h3> Users Index</h3> 
<ul> 
    <% users.each(function (user) { %> 
    <li><%= user.get("name") %></li> 
    <% })%> 
</ul> 

編譯這個javascript函數:

(function() { this.JST || (this.JST = {}); this.JST["users/index"] =  function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('<h3> Users Index</h3>\n\n<ul>\n '); users.each(function (user) { ; __p.push('\n <li>', user.get("name") ,'</li>\n '); }); __p.push('\n</ul>\n\n');}return __p.join('');}; 
}).call(this); 

在JavaScript功能上面,什麼是this指什麼? (即骨幹視圖等)

回答

2

如果你運行一個自執行的函數構建這樣

(function() { console.log(this) }).call(this); 

你會發現它會輸出(Chrome的控制檯輸出)

Window {external: Object, chrome: Object, document: document, i: undefined, StackExchange: Object…} 

因此,所有這一切只是將變量JST添加到全局(window)命名空間,以便它可以在每個後續腳本中訪問。

this.JST || (this.JST = {});將確保,如果window.JSTwindow = this正如我們看到的)存在,如果不是被創建,它的價值將是一個空對象(this.JST = {})。

+0

啊,這很有道理。謝謝! – User314159

相關問題