我在对象中保存了一个函数。
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,但它没有用。
如何将功能保留在对象中?
答案 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.
}
}
});