为什么可以在JSON中定义函数?

时间:2018-06-19 21:15:59

标签: javascript ecmascript-6

我正在阅读React文档https://reacttraining.com/react-router/web/example/auth-workflow,并试图理解以下代码:

函数定义似乎发生在json对象中,但我的理解是我们无法在json内使用函数

const fakeAuth = {
  isAuthenticated: false,
  authenticate(cb) {
    this.isAuthenticated = true;
    setTimeout(cb, 100); // fake async
  },
  signout(cb) {
    this.isAuthenticated = false;
    setTimeout(cb, 100);
  }
};

3 个答案:

答案 0 :(得分:1)

在真实的JSON中,您不能有function,也没有var。这是一种仅用于保存数据(基于JavaScript)的格式。您可以拥有一个函数,该函数是JavaScript中Object的属性。

答案 1 :(得分:1)

如果您指的是整个const fakeAuth = {...}代码,则不是JSON对象。而是创建一个fakeAuth对象,该对象具有属性(isAuthenticated)并具有参数(authenticatesignout

答案 2 :(得分:1)

如注释中所述,这不是JSON,而是Javascript对象文字。它使用ES6速记语法来表示函数属性。

authenticate(cb) {
  this.isAuthenticated = true;
  setTimeout(cb, 100); // fake async
},

的缩写:

authenticate: function(cb) {
  this.isAuthenticated = true;
  setTimeout(cb, 100); // fake async
},