0

所以我想用这个代码调用一个函数 Local.getThis onload:

    class Local {
        getThis() {
            let that;
            if (localStorage.getItem('that') === null) {
                that = [];
                console.log(that);
                localStorage.setItem('that', that);
            } else {
                that=JSON.parse(localStorage.getItem('that'));
                console.log(that);
            }
        }

    // DOM Load Event 
    document.addEventListener('DOMContentLoaded', Local.getThis)

但是什么都没有发生,没有错误。但是当我将“getThis”更改为 STATIC 时,它可以工作(输出:[])。它需要是静态的吗?

附言

设置后 = []; 我收到一个错误

'Uncaught SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at HTMLDocument.getThis'

在下一次重新加载时,但我猜这可能是另一个问题。

编辑:

为了记录错误与此有关localStorage.setItem('that', that);,它当然应该是localStorage.setItem('that', JSON.stringify(that));

4

3 回答 3

2

第 1 部分:是 JavaScript 中的保留字,更改参数名称。

第 2 部分:Local 是一个类,因此要直接从中访问函数,该函数必须是静态的。否则需要先启动一个实例。然后可以从该实例中使用该函数。

于 2019-01-15T13:05:55.410 回答
1

您应该首先创建一个 Local 类的实例this

const local = new Local();
document.addEventListener('DOMContentLoaded', local.getThis.bind(local))
//or
document.addEventListener('DOMContentLoaded', function() {
  local.getThis();
})

更新

您也不能使用变量名this,因为它是保留字。如果您不需要上下文 ( this),您可以将方法创建为静态方法:

class Local{}
Local.getThis = function() {
 // code without this
}

所以你可以使用你写的:

document.addEventListener('DOMContentLoaded', local.getThis);
于 2019-01-15T13:04:20.847 回答
1

但是什么都没有发生,没有错误。但是当我将“getThis”更改为 STATIC 时,它可以工作(输出:[])。它需要是静态的吗?

要将您的方法称为Local.getThis需要是static

否则你需要创建一个本地实例。

var local = new Local();
document.addEventListener('DOMContentLoaded', function() {
  local.getThis();
})
于 2019-01-15T13:04:44.883 回答