无法访问JavaScript Facade模式中的私有属性

无法访问JavaScript Facade模式中的私有属性,javascript,ecmascript-5,facade,Javascript,Ecmascript 5,Facade,问题 在facade模式的“private”对象中,我定义了方法和属性。当在这个“private”对象中调用一个方法时,我得到了未捕获的TypeError,它说我调用的方法不是一个函数 代码 var lazySize = (function() { var _ = { images: [], lazySizes: {}, resizeTimeout: null, pag

问题

在facade模式的“private”对象中,我定义了方法和属性。当在这个“private”对象中调用一个方法时,我得到了未捕获的TypeError,它说我调用的方法不是一个函数

代码

    var lazySize = (function() {

        var _ = {
            images: [],

            lazySizes: {},

            resizeTimeout: null,

            pageWidth: document.getElementsByClassName('crop_image')[0].offsetWidth,

            resizeHandler: function() {
                var i = 0;
                for (var image in this.lazySizes) {
                    if (this.pageWidth < image) {
                        this.images[i++].src = this.lazySizes[image];
                    }
                }
            },

            resizeThrottler: function() {
                if (!this.resizeTimeout) {
                    this.resizeTimeout = setTimeout(function() {
                        this.resizeTimeout = null;
                        this.resizeHandler();
                    }, 66);
                }
            }
        };

        return {
            init: function() {
                window.addEventListener('resize', _.resizeThrottler, false);
            }
        };

    }());

lazySize.init();
var lazySize=(函数(){
var uu={
图像:[],
懒汉:{},
resizeTimeout:null,
pageWidth:document.GetElementsByCassName('crop_image')[0]。offsetWidth,
resizeHandler:函数(){
var i=0;
for(此.lazySizes中的var图像){
if(this.pageWidth
错误

未捕获的TypeError:this.resizeHandler不是函数

问题

为什么我在resizeThrottler中无法访问resizehandler方法

当我使用
var
而不是
let
时,我的理解是JavaScript是函数范围的,所以我很困惑为什么我不能访问它


我正在努力改进我的JavaScript,所以如果我在这里做了一些非常糟糕的事情,如果有人能指出这一点,我将非常感激

这是因为
这个
与您认为的不一致

您传递
resizeThrottler
方法作为浏览器调用的引用,但是当它调用它时,上下文不再是您的对象,而是
窗口
,它显然没有相同的属性

您可以通过以下方式解决此问题:

 window.addEventListener('resize', _.resizeThrottler.bind(_), false);

通过这种方式,您可以将作为处理程序传递的方法的上下文设置为始终以
\uuu
作为
This

运行,我觉得您不公平地将其标记为重复。我的问题是针对这种设计模式的,您提供的链接甚至没有可接受的答案。trincot给我的这个建议帮助我解决了这个问题,也提供了一个有帮助的解释。请收回您的复制标志。