javascript - Node Mongoose TypeError: object is not a function with Array.map and Model.create -


i'm getting unexpected behavior out of mongoose: when use model.create argument in mapping function, receive error

variables.map(variable.create);  typeerror: object not function   @ array.foreach (native)   @ array.map (native) 

but when wrap model.create in anonymous function, don't receive error:

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

what gives?

using "node": "0.10.33" , "mongoose": "3.8.25"

ah, you've stumbled world of javascript objects , methods/properties.

the short answer internally method create uses other object properties/methods variable. when pass variable.create mapping function passes reference create directly , prototype chain broken. if want way use bind bind it's parent object:

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 = 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' global scope here this.word === word  say(); // hello

for long answer recommend reading you don't know js: & object prototypes.


Comments