为什么这个javascript类返回undefined

时间:2014-12-23 15:19:59

标签: javascript class this

我有这个简单的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构造函数中使用它时遇到了问题。

谢谢。

2 个答案:

答案 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”。在我写这篇文章时,我注意到另一个答案提出了解决问题的方法,所以我在此不再赘述。