【问题标题】:Embed an ES6 Arrow Function in JSON Object在 JSON 对象中嵌入 ES6 箭头函数
【发布时间】:2017-12-13 08:45:38
【问题描述】:

是否可以在 JSON 对象中嵌入 ES6 箭头函数?

例如,以下数据格式是否会被视为“有效”?

{
     function:{() => {console.log("executed")}}
}

【问题讨论】:

  • 不,这不是有效的 JSON。
  • 你测试了吗?测试将比写一个问题花费更少的时间;)
  • 那么,在 JSON 对象中传入函数是否无效?
  • 根据规范,JSON 文本格式不接受函数。现在,一个 Javascript 对象确实可以具有一个函数的属性。由于人们经常混淆这两个不同的东西,我不确定你的意思,尽管你指的是 JSON,它是一种文本格式并且不接受函数。 Javascript 对象可以有这样的函数:let obj = {somePropertyName: function() { console.log("hi")}},然后可以调用为 obj.somePropertyName()。
  • 仅供参考,没有“JSON 对象”之类的东西

标签: javascript json ecmascript-6


【解决方案1】:

首先,不存在 JSON 对象之类的东西。 JSON 是一种文本格式,而不是一种对象格式。有 JSON 文本和 Javascript 对象。两者是完全不同的东西。

根据JSON specification,JSON 文本格式不接受函数。 JSON 格式字符串中的值在本规范中以简写形式描述,如下所示:

value = false / null / true / object / array / number / string

这些是 JSON 中允许的类型。


另一方面,Javascript 对象确实可以有一个作为函数的属性。由于人们经常混淆这两个不同的东西,我不确定你的意思,尽管你指的是 JSON,它是一种文本格式并且不接受函数。

一个 Javascript 对象可以有这样的函数:

let obj = {
    somePropertyName: function() { console.log("hi")}
};

然后可以称为:

 obj.somePropertyName();

ES6 语法还允许使用其他几种方式来声明函数,但想法是一样的。您最终会在指向函数的对象上获得一个命名属性。使用 ES6 语法的箭头函数:

let obj = {
    somePropertyName: () => { console.log("hi")}
};

重要的是要认识到,当使用箭头函数时,调用该函数时this的值不会被设置为对象本身,因为根据定义,箭头函数使用this的词法形式,并且this 不是由方法调用方式设置的,因为它与普通函数定义一样。

【讨论】:

    猜你喜欢
    • 2019-06-27
    • 2019-01-06
    • 1970-01-01
    • 2018-07-10
    相关资源
    最近更新 更多