Sor*_*anu 33 javascript json object
我有一个具有一些属性和方法的对象,如下所示:
{name: "FirstName",
age: "19",
load: function () {},
uniq: 0.5233059714082628}
我必须将此对象传递给另一个函数.所以我尝试使用JSON.stringify(obj),但是加载函数(当然不是空的,这只是出于本例的目的)正在"丢失".
有没有办法stringify,反对和维护它拥有的方法?
谢谢!
chj*_*hjj 59
有一种方法可以在JS中序列化一个函数,但是你必须在另一方面评估它,它也将失去对它的原始范围的访问权限.一种方法是:
JSON.stringify(objWithFunction, function(key, val) {
  if (typeof val === 'function') {
    return val + ''; // implicitly `toString` it
  }
  return val;
});
尽管人们在这里发布了什么,但是你要问的是一些合法的用途,但是,这一切都取决于你将要用它做什么.可能有更好的方式去做你正在尝试做的事情.
为什么要对字符串进行字符串化?JSON不理解函数(并且它不应该理解).如果你想传递对象,为什么不通过以下方式之一?
var x = {name: "FirstName", age: "19", load: function () {alert('hai')}, uniq: 0.5233059714082628};
function y(obj) {
    obj.load();
}
// works
y({name: "FirstName", age: "19", load: function () {alert('hai')}, uniq: 0.5233059714082628});
// "safer"
y(({name: "FirstName", age: "19", load: function () {alert('hai')}, uniq: 0.5233059714082628}));
// how it's supposed to be done
y(x);
不是我永远不会做的事情,但值得一提的是,有一些方法可以对函数进行字符串化(即并非不可能)。
采取以下措施:
var func = function(){console.log('logged')};
var strFunc = func.toString();
//then
var parsedFunc = eval('('+strFunc+')');
parsedFunc();
//or simply
eval('('+strFunc+')()');
//or
eval('('+strFunc+')')();
//or
eval('var anotherFunc='+strFunc);
anotherFunc()
上面带有覆盖的toJSON()可以实现一个浅的字符串化函数;
免责声明:在使用之前查看这篇文章和其他文章并做出自己的决定eval()
| 归档时间: | 
 | 
| 查看次数: | 35980 次 | 
| 最近记录: |