Javascript 无法从委托函数访问类属性

Javascript 无法从委托函数访问类属性,javascript,es6-modules,Javascript,Es6 Modules,长期从事.Net开发,负责将一堆旧的JS代码转换为新的ES6JS模块。我正在尝试运行下面的简单代码,但是当调用jumpToVideoNew时,委托函数中的this.allowVideJump无法访问类属性AllowVideJump。我正在尝试设置一个简单的定时延迟,这样调用代码就不会重复使用jumpToVideoNew函数。我理解变量失去作用域的概念,但我尝试设置_this=this;在代表中也使用此选项,但没有成功。还尝试将变量的引用传递到函数中并以这种方式访问它,但也没有成功。花2个小时在这

长期从事.Net开发,负责将一堆旧的JS代码转换为新的ES6JS模块。我正在尝试运行下面的简单代码,但是当调用jumpToVideoNew时,委托函数中的this.allowVideJump无法访问类属性AllowVideJump。我正在尝试设置一个简单的定时延迟,这样调用代码就不会重复使用jumpToVideoNew函数。我理解变量失去作用域的概念,但我尝试设置_this=this;在代表中也使用此选项,但没有成功。还尝试将变量的引用传递到函数中并以这种方式访问它,但也没有成功。花2个小时在这么简单的事情上提醒我,为什么我在可能的时候避开javascript

export class WebUtility {
    constructor() {
        this.allowVideoJump = true;
        this.delay = function () { this.allowVidJump = true; };
    }

    jumpToVideoNew() {
        if (this.allowVideoJump) {
            this.allowVideoJump = false;
            setTimeout(this.delay, 1000);
        }
    }
}

使用匿名箭头函数 JS中的function关键字创建了一个新的作用域以及一个新的this,您刚才定义的函数===this,因此this.allowVidJump本质上是该作用域中的函数{}.allowVidJump

试着这样做:

导出类WebUtility{ 建造师{ this.allowVideoJump=true; this.delay=>{this.allowVidJump=true;};//匿名lambda } 跳转到视频新{ 如果这个.allowVideoJump{ this.allowVideoJump=false; setTimeoutthis.delay,1000; } } }
他已经有了匿名功能。区别在于它是一个箭头函数。上下文不是函数,而是全局窗口对象。这是我第一次看到有人调用JS的函数表达式lambda函数。通常的术语只是函数表达式,它们可以是命名函数表达式,也可以是匿名函数表达式,这取决于是否在function关键字后加上名称。@Barmar wait,为什么上下文是全局窗口对象?如果你能发布一个链接/例子来详细解释我是一个新时代的JS开发人员,那就太好了。。基本上,在我的第一次牛仔竞技表演之后,我总是使用带有function关键字的箭头函数,除非我需要递归。当您使用表示法object.func调用非箭头函数时,上下文是object。但如果您只是以func的形式调用它,它使用全局上下文,即浏览器中的窗口,node.js中的其他一些全局对象。setTimeout没有访问原始对象的权限,因此它以第二种方式调用它。