Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我不能访问函数中的属性?_Javascript - Fatal编程技术网

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

Javascript 为什么我不能访问函数中的属性?,javascript,Javascript,只需要访问下面代码的post方法中的baseUrl。 这样做的正确方法是什么? 如果你能向我解释为什么这不起作用,我会很感激 const API = { baseUrl: "http://my_api_address", post: (path, payload) => { let headers = { Accept: "application/json", "Content-Type": "application/json" };

只需要访问下面代码的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替换为“”,则上面的代码可以工作,因此我认为没有任何其他问题。

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

改用
function(){…}
语法


请注意,您没有显示对
API.post()
的调用,因此可能还有其他问题

请勿对post方法使用箭头函数。只需使用
function(){}
。箭头函数不绑定自己的上下文,而是从定义的位置使用上下文。将
post:(路径,有效载荷)=>{
更改为
post(路径,有效载荷){
,以便可以访问
Aww,我不知道。谢谢。