首页 > 解决方案 > Object.defineProperty 问题 - TypeError: cookieStore.getAll is not a function

问题描述

Object.defineProperty用来检测 API 调用。但是,一旦我运行代码,实际功能就会出现“失败错误”。

这是我进行 API 调用的一段代码。

function get_cookie() {
  console.log(cookieStore)
  try {
    // try to get all cookies
    cookieStore.getAll()
    .then(function(cookies)
    {
      console.log(cookies)
    })
  } catch(e) {
    console.error(`Failed `)
  }
}
// call the function
get_cookie()

这是检测功能(问题可能出在哪里),

function traceCookieStore() {
    cookieStore.getAll()
    .then(function(cookies)
    {
      // console.log(cookies);
      Object.defineProperty(CookieStore.prototype, 'getAll',{
        get: function(){
          cookiestoreTrace.push({[CookieStore.prototype.constructor.name]: 'cookieStore.getAll()'});
          console.log("cookiestoreTrace->",cookiestoreTrace);


         return cookie;
        }
      })
    })


}  

traceCookieStore();

错误的措辞是

类型错误:cookieStore.getAll 不是函数

我必须承认我对 JS 承诺并不是很擅长,所以我对如何调试这个问题有点不知所措。

编辑 1:我正在get_cookie()从 web worker 上下文运行函数,通过调用 API 来获取该域的 cookie cookieStore.getAll,并且该函数运行正常。该功能traceCookieStore()是检测是否对 API 进行了调用cookieStore.getAll,这将钩住 API 调用,然后返回getAll(即 cookie)的值。

很抱歉,如果我的初始信息还不够,正如我所提到的,我是 Javascript 的新手,并且仍在学习它的来龙去脉。

编辑 2:CookieStore 是提供用于从页面和工作上下文异步设置和获取 cookie 的 API。参考这里

标签: javascriptes6-promise

解决方案


以下是帮助我解决此问题的代码模板。

var traceCookieStore = function(obj, propKey) {
  
    var propOriginal = obj[propKey];
    Object.defineProperty(obj, prop, {
      "get": function(){
        //do what you want here
        return propOriginal;

      }
    }) 
}

我在这里分享这个,因为我没有在 Stackoverflow 上找到任何相关的答案,这可能会对某人有所帮助。祝你好运!


推荐阅读