我对JavaScript中的词法绑定有问题。这是我的密码:
.pipe(through.obj((url, enc, done)=>{
if(!url) return done();
request.head(url, (err, response)=>{
this.push(url + ' is ' + (err ? 'down' : 'up') + '\n');
done();
});
}))我知道这个错误:
TypeError: this.push is not a function但是当我使用es5函数语法时,比如function(url,enc,done){...}
.pipe(through.obj(function(url, enc, done){
if(!url) return done();
request.head(url, (err, response)=>{
this.push(url + ' is ' + (err ? 'down' : 'up') + '\n');
done();
});
}))那么我的代码运行良好。
在本例中,如何在Arrow函数中使用this.push()?--我知道Arrow函数的词法绑定,但我不知道如何使用this。
谢谢你读我的短信。
发布于 2020-06-01 08:01:23
在前一种情况下,您的this指向window对象。所以你才会犯这个错误。
arrow函数不提供自己的this绑定(它们保留了包围词法上下文的这个值)
在箭头函数中,这保留了包围词法上下文的this的值。在全局代码中,它将被设置为全局对象: var globalObject = this;var foo = (() => this);console.log(foo() === globalObject);// true
查看此MDN-这个,特别是Arrow函数部分
https://stackoverflow.com/questions/62127678
复制相似问题