为什么我不能访问函数内的属性?

时间:2018-11-18 19:24:11

标签: javascript

只需在下面的代码的post方法中访问baseUrl。 正确的方法是什么? 如果您能向我解释为什么这行不通,我将很感激。

const API = {
  baseUrl: "http://my_api_address",

  post: (path, payload) => {
    let headers = {
      Accept: "application/json",
      "Content-Type": "application/json"
    };

    let token = localStorage.getItem("accessToken");
    if (token) {
      headers["Authorization"] = "Bearer " + token;
    }

    alert(this); // shows undefined so I can't access this.baseUrl inside this function

    return fetch(this.baseUrl + path, {
      method: "POST",
      headers,
      body: JSON.stringify(payload)
   })
      .then(res => {
        return res.json().then(json => ({ json, res }));
      })
      .then(({ json, res }) => {
        if (!res.ok) {
          return Promise.reject(json);
        }

        return json;
      });
  }
};

根据要求:

API.post("/account/resetpassword", data)
  .then(function(json) {
    UI.toggleModal("#modalId");
    UI.loader("hide");
    UI.alert(json.success, json.message);
  })
  .catch(function(json) {
    console.log(json);
  });

如果我将this.baseUrl替换为“ http://my_api_address”,则上面的代码将起作用,因此我认为没有其他问题。

1 个答案:

答案 0 :(得分:2)

这是因为对于post:,您使用了一个箭头函数,该函数不绑定自己的this,而是使用了最接近的词法定义的一个(如果有的话)。

改为使用function() {...}语法。

请注意,您没有显示对API.post()的呼叫,因此也可能存在其他问题