栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

json.stringify不处理对象方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

json.stringify不处理对象方法

javascript中的函数不仅仅是其代码。他们也有范围。代码可以字符串化,但作用域不能。

JSON.stringify()
将对JSON支持的值进行编码。值可以是对象,数组,字符串,数字和布尔值的对象。其他任何事情都将被忽略或引发错误。JSON不支持函数。JSON仅处理纯数据,功能不是数据,而是具有更复杂语义的行为。


也就是说,您可以更改

JSON.stringify()
工作方式。第二个参数是一个
replacer
函数。因此,您可以通过强制功能分层来强制实现所需的行为:

var obj = {  foo: function() {    return "I'm a function!";  }};var json = JSON.stringify(obj, function(key, value) {  if (typeof value === 'function') {    return value.toString();  } else {    return value;  }});console.log(json);// {"foo":"function () { return "I'm a function!" }"}

但是,当您读回该内容时,您将必须评估函数字符串并将结果设置回该对象,因为JSON 不支持functions


JSON中的所有编码功能总会让人毛骨悚然。你确定你要这么做吗?可能有更好的方法…

也许您可以保存原始数据,然后将其从页面上加载的JS传递给构造函数。

localStorage
只会保存数据,但是加载到页面上的代码将提供对这些数据进行操作的方法。

// contrived example...var MyClass = function(data) {  this.firstName = data.firstName;  this.lastName = data.lastName;}MyClass.prototype.getName() {  return this.firstName + ' ' + this.lastName;}localStorage.peopleData = [{  firstName: 'Bob',  lastName:  'McDudeFace'}];var peopleData = localStorage.peopleData;var bob = new MyClass(peopleData[0]);bob.getName() // 'Bob McDudeFace'

我们不需要将

getName()
方法保存到
localStorage
。我们只需要将数据馈送到提供该方法的构造函数中即可。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/609116.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号