javascript:将函数保存到对象

时间:2014-06-10 09:59:15

标签: javascript mongodb

我在对象中保存了一个函数。

var obj = {
  name: 'bob',
  getName: function() {
    return this.name;
  }
};
console.log(obj.getName());

它显示了' bob'。 但是当我将这个obj保存到Session或MongoDB时 功能消失了。

Session.set('tmp', obj);
var tmpObj = Session.get('tmp');
console.log(tmpObj.getName());

这显示未定义。

我也测试了JSON.stringify / parse,但它没有用。

如何将功能保留在对象中?

2 个答案:

答案 0 :(得分:0)

在大多数情况下,您无法保存功能。尝试将所有变量放入原始属性中,然后重新加载" dumb"对象,使用以下方法重新初始化:

var ObjMaker = function(attrs){
  this.name = attrs.name;
}

ObjMaker.greet = function(){
  return 'Hello ' + this.name;
}

var reloadedObj = { name: 'bob' };

var obj = new Obj(reloadedObj);

console.log(obj.greet());

答案 1 :(得分:0)

在大多数情况下,这是不可能的。从技术上讲,您可以使用obj.getName.toString()序列化函数,该函数应返回

function() {
    return this.name;
}

然后你可以用eval("(" + functionString + ")()")之类的东西来运行它。但这几乎总是一个坏主意。

如果要将其存储到MongoDB中,您可能希望使用Mongoose ODM和自定义setter。这允许您在Schema上定义一个函数,该函数描述MongoDB中存储的对象,它们可以满足您的需求。

var objSchema = new Schema({
  name: {
    type: String,
    get: function(name) {
      return name; //Of course, you could manipulate this more if you want.
    }
  }
});