Node.js/Javascript通过设置_proto将方法引入现有对象__

Node.js/Javascript通过设置_proto将方法引入现有对象__,javascript,node.js,Javascript,Node.js,TL;DR-可以通过设置\uuuu proto\uuu属性来实现类似mixin的行为吗 我有一个对象列表(从一些外部源获取),它们都具有相同的属性集(比如,\u name)。我想为它们中的每一个添加一些常用方法(例如,nameLen(),它返回\u name属性的长度)。以下是一种方法: // In reality this list of docs is generated by the DB driver: var docs = [ { _name: 'some name' }, { _na

TL;DR-可以通过设置
\uuuu proto\uuu
属性来实现类似mixin的行为吗

我有一个对象列表(从一些外部源获取),它们都具有相同的属性集(比如,
\u name
)。我想为它们中的每一个添加一些常用方法(例如,
nameLen()
,它返回
\u name
属性的长度)。以下是一种方法:

// In reality this list of docs is generated by the DB driver:
var docs = [ { _name: 'some name' }, { _name: 'some other name' } ]

// Now, I want to introduce a method to each doc...
docs.forEach(function(doc) {
  doc.nameLen = function() { return this._name.length; }
});
然后我意识到我可以通过设置每个文档的
\uuu proto\uu
属性来实现类似的行为:

// In reality this list of docs is generated by the DB driver:
var docs = [ { _name: 'some name' }, { _name: 'some other name' } ]

// Now, I want to introduce a method to each doc...
var myMixin = { nameLen: function() { return this._name.length; } };
docs.forEach(function(doc) { 
  doc.__proto__ = myMixin; // <-- Use myMixin as the prototype
});  
//实际上,此文档列表是由DB驱动程序生成的:
var docs=[{{u name:'somename'},{{u name:'someothername'}]
//现在,我想为每个文档介绍一个方法。。。
var myMixin={nameLen:function(){返回此值。_name.length;};
docs.forEach(函数(doc){

doc.\uuuu proto\uuuu=myMixin;//最好是使用显式类,而不是临时的内联proto更改

var Doc = require( "./doc.js" );

//FIXME configure your driver/schema so that Doc objects
//are returned in the first place
var docs = docs.map(function(v) {
     return new Doc(v._name);
});

//Done
Doc.js:

module.exports = (function() {
    var method = Doc.prototype;

    function Doc( name ) {
        this._name = name;
    }

    method.nameLen = function() {
        return this._name.length;
    };

    return Doc;
})();

但是,是的,即使在我看来它不太可维护,这也是安全的。

@Paulpro-可以提供一个关于如何“用…扩展它”的指针?在JS中有很多方法可以改变对象,所以我想知道你到底在想什么。谢谢。请注意,这些文档是从外部数据源获取的,我无法控制它们的创建。@ItayMan不会改变太多东西:P即使最好让DB驱动程序返回
文档
。如果你是我们的话在Mongoose中,使用Doc对象等定义模式。这是由我离开Mongoose触发的,所以我实际上是在模仿Mongoose的好部分。