无法访问JavaScript Facade模式中的私有属性
问题 在facade模式的“private”对象中,我定义了方法和属性。当在这个“private”对象中调用一个方法时,我得到了未捕获的TypeError,它说我调用的方法不是一个函数 代码无法访问JavaScript Facade模式中的私有属性,javascript,ecmascript-5,facade,Javascript,Ecmascript 5,Facade,问题 在facade模式的“private”对象中,我定义了方法和属性。当在这个“private”对象中调用一个方法时,我得到了未捕获的TypeError,它说我调用的方法不是一个函数 代码 var lazySize = (function() { var _ = { images: [], lazySizes: {}, resizeTimeout: null, pag
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给我的这个建议帮助我解决了这个问题,也提供了一个有帮助的解释。请收回您的复制标志。