我有这个简单的Javascript代码来编写一些模块,但即使我从内部调用函数,我也不知道为什么会得到未定义的结果:
window.onload = function () {
function testFunction() {
this.hours = null;
function getHours() {
return this.hours;
}
alert(getHours());
return {
getHours: function () {
return getHours();
}
}
}
var test = new testFunction();
alert(test.getHours());
}
我认为在javascript中理解THIS
关键字并在javascript构造函数中使用它时遇到了问题。
谢谢。
答案 0 :(得分:1)
你的(初始)问题在这里:
return {
getHours: function () {
return getHours();
}
}
制作一个"裸体"在此功能中拨打getHours()
,您将丢失所有this
个上下文。
相反,这样做:
return {
getHours: getHours
}
即。返回一个包含对所需函数的引用的对象。当您致电test.getHours()
时,它会正确地将test
作为this
传递给getHours
。
另一个问题是,因为您使用return
来公开一组函数,所返回的对象将成为新构造的this
,并且不再引用{ {1}}已将this
添加到!
这是两个(或许更多)JS OOP技术的不幸混蛋,它们之间相互冲突。
答案 1 :(得分:1)
好吧,想想“这个”指向的地方。第一个指向它所在的函数“testFunction()”。第二个指向它所在的函数,“getHours()”,但是你定义了两次getHours,第二次返回的是未定义的,因为你不再有“this”。默认情况下,如果没有您想要返回的特定内容,javascript将返回“undefined”。在我写这篇文章时,我注意到另一个答案提出了解决问题的方法,所以我在此不再赘述。