以下內容都是關於在nodejs中的this而非javascript中的this,nodejs中的this和在瀏覽器中javascript中的this是不一樣的。
在全域中的this
console.log(this); {} this.num = 10; console.log(this.num); 10 console.log(global.num); undefined
全域中的this預設是一個空物件。且在全域中this與global物件沒有任何的關係,那麼全域中的this究竟指向的是誰?在本章節後半部我們會講解。
在函數中的this
function fn(){ this.num = 10; } fn(); console.log(this); {} console.log(this.num); undefined console.log(global.num); 10
在函數中this指向的是global對象,和全局中的this不是同一個對象,簡單來說,你在函數中透過this定義的變數就是相當於給global添加了一個屬性,此時與全局中的this已經沒有關係了。
如果不相信,看下面這段程式碼可以證明。
function fn(){ function fn2(){ this.age = 18; } fn2(); console.log(this); global console.log(this.age); 18 console.log(global.age); 18 } fn();
對吧,在函數中this指向的是global。
建構函式中的this
function Fn(){ this.num = 998; } var fn = new Fn(); console.log(fn.num); 998 console.log(global.num); undefined
在建構子中this指向的是它的實例,而不是global。
我們現在可以聊聊關於全局中的this了,說到全局中的this,其實和Nodejs中的作用域有一些關係,如果你想了解Nodejs中關於作用域的信息可以看探討Nodejs中的作用域問題。這篇文章。
回到正題,全域中的this指向的是module.exports。
this.num = 10; console.log(module.exports); {num:10} console.log(module.exports.num);
為什麼在全域this會指向module.exports,那就需要先了解更多關於module.exports的相關知識了,暫時我們先了解到這裡,後面有機會我們會聊到module