function Person(){
this.age = 0;
setInterval(() => {
this.age++; // this refers to the person object
}, 1000);
}
但是,如果我想访问"这个" setInterval函数,而不是父对象。我知道箭头函数不具备自己的词汇,但除了编写非箭头函数之外,还有办法绕过这个吗?
答案 0 :(得分:4)
不,arrow function does not possess athis
variable (也不是argument
,super
& new.target
)因此没有任何内容可以避免"规避&#34 34;到。
箭头函数旨在继承词法范围,如果 具有自己的this
- 它会干扰其定义行为。
不要将箭头功能视为常规功能的简单速记。
相反,你应该"阅读"箭头的功能如下:
... 在周围的上下文中执行这些语句 ...
和
... 此功能不具有跟踪4 patterns of invocation, are being used to determine the value of
的精神开销this
中的哪个
答案 1 :(得分:1)
this
= setInterval()
的{{1}}
如果您的脚本中启用了严格模式(类似于脚本开头的window
),那么它将是'use strict';
。出于所有意图和目的,您可能希望使用undefined
你可以重写你的功能来访问这样的窗口:
window
此外,您还没有保存setInterval ID,因此当对象过时时您无法清除它。它将保留在内存中,导致潜在的内存泄漏
setInterval(() => {
this.age++; // this refers to the person object
window.something = this.age;
}, 1000);
因此当一个人过时时,你可以杀死他们,不留痕迹。