Javascript旧语法到箭头功能转换

时间:2017-07-25 09:45:14

标签: javascript ajax xmlhttprequest arrow-functions

所以我想在没有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';

这不起作用。 我关闭还是我看完这个完全错误?我再次不想在本练习中使用库。

2 个答案:

答案 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);
            
        }
    
};