获取 DedicatedWorkerGlobalScope 而不是 Constructor
Getting DedicatedWorkerGlobalScope instead of Constructor
当我在 onScroll 处理程序中打印 this 时,我得到
DedicatedWorkerGlobalScope 而不是 Constructor。
var Frame = React.createClass({
_handleScroll: (ev) => {
console.log(this) //DedicatedWorkerGlobalScope
},
render: function() {
return (
<ScrollView
ref='scrollViewH'
onScroll={this._handleScroll}>
{items}
</ScrollView>
);
}
});
如果我使用内联函数处理滚动,这会正常工作:
var Frame = React.createClass({
render: function() {
return (
<ScrollView
ref='scrollViewH'
onScroll={(ev) => {
console.log(this) //Constructor
}}>
{items}
</ScrollView>
);
}
});
绑定这个不起作用。
onScroll={this._handleScroll.bind(this)}
当我以旧方式(没有 ES6 箭头函数)重写回调声明时,它按预期工作。为什么这样?!!!!如果有人知道,请给我一个答案。
var Frame = React.createClass({
_handleScroll: function(ev) {
console.log(this); //Constructor
},
render: function() {
return (
<ScrollView
ref='scrollViewH'
onScroll={this._handleScroll}>
{items}
</ScrollView>
);
}
});
当您使用箭头函数声明时,您使用的是与变量 'Frame' 在同一级别可用的 'this',因为 es6 正在推断上下文。这在下面的文章中有解释,其中指出
[Arrow functions] have implicit return and most importantly, they always use the value of this from the enclosing scope
这篇文章对绑定语法在 ES6 中的工作原理以及如何获得预期的行为给出了相当不错的解释:
https://www.sitepoint.com/bind-javascripts-this-keyword-react/
当我在 onScroll 处理程序中打印 this 时,我得到 DedicatedWorkerGlobalScope 而不是 Constructor。
var Frame = React.createClass({
_handleScroll: (ev) => {
console.log(this) //DedicatedWorkerGlobalScope
},
render: function() {
return (
<ScrollView
ref='scrollViewH'
onScroll={this._handleScroll}>
{items}
</ScrollView>
);
}
});
如果我使用内联函数处理滚动,这会正常工作:
var Frame = React.createClass({
render: function() {
return (
<ScrollView
ref='scrollViewH'
onScroll={(ev) => {
console.log(this) //Constructor
}}>
{items}
</ScrollView>
);
}
});
绑定这个不起作用。
onScroll={this._handleScroll.bind(this)}
当我以旧方式(没有 ES6 箭头函数)重写回调声明时,它按预期工作。为什么这样?!!!!如果有人知道,请给我一个答案。
var Frame = React.createClass({
_handleScroll: function(ev) {
console.log(this); //Constructor
},
render: function() {
return (
<ScrollView
ref='scrollViewH'
onScroll={this._handleScroll}>
{items}
</ScrollView>
);
}
});
当您使用箭头函数声明时,您使用的是与变量 'Frame' 在同一级别可用的 'this',因为 es6 正在推断上下文。这在下面的文章中有解释,其中指出
[Arrow functions] have implicit return and most importantly, they always use the value of this from the enclosing scope
这篇文章对绑定语法在 ES6 中的工作原理以及如何获得预期的行为给出了相当不错的解释:
https://www.sitepoint.com/bind-javascripts-this-keyword-react/