我正在尝试ES6,并希望在我的函数中包含一个属性,就像这样
var person = {
name: "jason",
shout: () => console.log("my name is ", this.name)
}
person.shout() // Should print out my name is jason
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此代码控制台时只记录日志my name is.我究竟做错了什么?
在我的程序中,使用function()语法返回this目标元素的值,但是使用箭头函数返回window对象。这两个功能分别如何获得this?
function editTemplates() {
//sits within for loop
clocksTemplate.gmt[i].addEventListener('keydown', (e) => {
console.log(this); //returns window object
});
clocksTemplate.gmt[i].addEventListener('keydown', function(e) {
console.log(this); //returns element bound to clocksTemplate.gmt
});
Run Code Online (Sandbox Code Playgroud)
根据带有箭头功能的MDN,这应“从封闭的上下文中保留原始含义”。封闭上下文是事件侦听器吗?或它位于其中的功能?根据我的测试,箭头功能的封闭上下文必须是Window对象,但我看不到如何。使用function()语法,封闭函数旨在重新定义此值,我假设它在方法中正在执行此操作。这个主题在这里和这里已经进行了深入的讨论,但是我是JS新手,我不明白这对我的问题的影响。addEventListener