在使用JavaScript對象時,我一直在閱讀關於'this'關鍵字的很多文章,但我仍然有些困惑。我很高興編寫面向對象的Javascript,並且通過引用完整的對象路徑來解決'this'問題,但我不喜歡這個事實,我仍然覺得'this'混亂。對JavaScript的'this'仍然感到困惑
我找到了一個很好的答案here幫助我,但我仍然不是100%確定。所以,在這個例子上。下面的腳本是從test.html的鏈接與<script src="js/test.js"></script>
if (!nick) {
var nick = {};
}
nick.name= function(){
var helloA = 'Hello A';
console.log('1.',this, this.helloA);
var init = function(){
var helloB = 'Hello B';
console.log('2.',this, this.helloB);
}
return {
init: init
}
}();
nick.name.init();
什麼樣的期望看到的是
1. Object {} nick.name, 'Hello A'
2. Object {} init, 'Hello B'
但是我所得到的是什麼?
1. Window test.html, undefined
2. Object {} init, undefined
我想我明白了一些什麼發生的事情,但如果有人在那裏它解釋了我,我不會介意。
此外,我不完全確定爲什麼第一個'console.log'被調用?如果我刪除調用init函數//nick.name.init()
螢火蟲仍然輸出1. Window test.html, undefined
。這是爲什麼?爲什麼在html頁面加載時,由窗口對象調用nick.name()?
非常感謝
我沒有說它在'lowman'的上下文中定義了'helloB'。它在'lowman'的**範圍**中定義。存在於給定範圍內的變量與對象上的屬性不同。 – Quentin 2010-04-28 12:20:54
非常感謝你的幫助David。我已經在早上創造了一些例子,我想我正在慢慢獲得它。 – screenm0nkey 2010-04-29 12:04:19