Dan*_*lig 12 prototype object mongodb node.js
我目前正在使用node-mongo-native驱动程序来使用node.js和MongoDB.
我使用Mongo控制台存储和检索JS对象进行了一些测试.我想,如果我存储一个包含函数/方法的对象,方法和函数也将存储在集合中.这很有趣,因为我认为函数无法存储在MongoDB中(除了system.js集合,如Mongo文档所建议的那样).
此外,它不仅会存储方法,还会存储对象整个原型链的每个方法和成员.除此之外,我不喜欢这种行为,并认为它不直观,我不能拥有它.
我打算在Mongo系列中管理用户.为此,我有一个User对象,其中包含用作每个用户实例的原型的所有用户方法.用户对象本身只包含用户属性.
如果我将用户存储在Mongo集合中,我只想存储用户对象的自己的属性.没有原型成员,特别是没有原型方法.目前我还没有看到如何干净利落地做到这一点.我认为可能有用的选项是:
但是,我确实遇到了相同的问题:从集合中加载用户时.AFAIK创建后无法在JavaScript中更改对象原型.当Mongo实例化从集合中检索的对象时,也无法指定要使用的原型.所以基本上我总是得到使用Mongo从Object继承的对象.据我所知,我有2个选项可以从这一点恢复可用的用户对象:
我的假设,尤其是关于为查询结果指定原型的可能性,是否正确?什么是正确的方法,为什么?我肯定不是第一个使用node.js在MongoDB中存储和复制对象的人.
目前我会采用方法2/2.我真的不喜欢它,但它是最有效的,也是唯一一个与API完全协同工作的人.但是,我更倾向于听说实际上API没有任何错误,但我不知道如何正确使用它.所以,请赐教:)
Dan*_*lig 10
我刚刚意识到,实际上可以在V8 /节点中更改对象原型.虽然这不符合标准,但它可以在各种浏览器中使用,特别是在V8 /节点中!
function User(username, email) {
this.username = username;
this.email = email;
}
User.prototype.sendMail = function (subject, text) {
mailer.send(this.email, subject, text);
};
var o = {username: 'LoadeFromMongoDB', email: 'nomail@nomail.no'};
o.__proto__ = User.prototype;
o.sendMail('Hello, MongoDB User!', 'You where loaded from MongoDB, but inherit from User nevertheless! Congratulations!');
Run Code Online (Sandbox Code Playgroud)
这用于各种模块和插件 - 甚至核心模块都使用这种技术,尽管它不是ECMAScript标准.所以我想在node.js中使用是安全的.
归档时间: |
|
查看次数: |
7589 次 |
最近记录: |