在使用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