Node Mongoose TypeError:object不是Array.map和Model.create的函数

时间:2015-05-08 13:59:17

标签: javascript node.js mongodb mongoose

我从Mongoose中获得了一些意想不到的行为:当我在映射函数中使用Model.create作为参数时,我收到错误

variables.map(Variable.create);

TypeError: object is not a function
  at Array.forEach (native)
  at Array.map (native)

但是当我在一个匿名函数中包装Model.create时,我没有收到错误:

variables.map(function(variable) {
  return Variable.create(variable);
});

是什么给出了?

使用"node": "0.10.33""mongoose": "3.8.25"

1 个答案:

答案 0 :(得分:0)

啊,你偶然发现了Javascript对象及其方法/属性的世界。

简短的回答是内部方法create使用Variable中的其他对象属性/方法。当您将Variable.create传递给映射函数时,它会直接传递对create的引用,因此原型链现在已被破坏。如果你真的想这样做,你可以使用bind将它绑定回它的父对象:

variables.map(Variables.create.bind(Variables));



var objA = {
  word: 'bar',
  say: function() {
    alert(this.word);
  }
};

var objB = {
  word: 'foo',
  say: function() {
    alert(this.word);
  }
};

var say = objA.say;
var bound = objA.say.bind(objB);

objA.word; // bar
objA.say(); // bar

objB.word; // foo
objB.say(); // foo

say(); // undefined --> this.word
bound(); // foo

// bonus fun
word = 'hello'; // 'this' is the global scope here so this.word === word
say(); // hello




对于长篇答案,我建议您阅读You Don't Know JS: this & Object Prototypes