所以我想在没有jquery或其他库的情况下使用这个例子。
我有这段代码
function()
如您所见,它使用旧样式let xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = () => {...}
如何将其更改为箭头功能样式?
DECLARE @a char(22) = 'John went to buy a car', @b char(15)= 'Tom went to pub';
SELECT IIF(1=1 , @a, @b )+'. He met a friend';
这不起作用。 我关闭还是我看完这个完全错误?我再次不想在本练习中使用库。
答案 0 :(得分:1)
箭头函数的问题在于它们保留了外部作用域的this
对象。
您的第一个示例将XMLHttpRequest
绑定到this
引用,第二个window
要使用箭头表示法进行此操作,您需要引用外部名称为XMLHttpRequest
的{{1}}或将其绑定到回调函数:
xmlHttp
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
请注意,您无法通过任何方式覆盖箭头函数的let xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = ((request) => {...}).bind(undefined, request);
引用(绑定,调用,应用)
答案 1 :(得分:1)
上面的Bellian代码看起来不错,但是.bind(undefined, request);
却使操作变得简单。
还有另一种方法可以将其同步到您的问题预期答案:
我强烈建议您改为执行此操作。箭头功能删除了直接的this
,以便更好地访问结果。仅在没有console.log(x)
.target
您还可以:
let xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = x => {
let result = x.target;
if(result.readyState == 4 && result.status == 200){
console.log(result.responseText);
}
};