My question is not about how to keep reference intact, but why module.exports and exports point to different object when only assign module.exports
在 2013年10月16日星期三UTC+8下午4时29分59秒,greelgorke写道: > > there is no magic. at all. what whatever is assigned to module.exports is > returned to requiring code. the exports is initally set up to be a > shortcut reference to module.exports if you assign something to > module.exports you have to assign the same thing to exports if you want > to keep this reference intact. so if you want to re-assign this do it this > way: > > module.exports = exports = myNewGreatExports > > so if you do so, everything is ok and in place and you can still use the > shortcut. You also can just not use the shortcut and use always the longer > form. > > Am Mittwoch, 16. Oktober 2013 08:40:38 UTC+2 schrieb yougen zhuang: >> >> Not exactly. If just setting "exports" would not work, for example, >> exports = Rect, than in another file, assuming main.js, var Rect = >> require('Rect'), var rect = new Rect() will fail. >> >> 在 2013年10月15日星期二UTC+8下午8时33分15秒,greelgorke写道: >>> >>> module.exports and exports are referencing the same object. if you do >>> module.exports = foo, both point to different objects. if you want to >>> assign to module.exports and keep the shortcut exports correct do this >>> >>> module.exports = exports = foo >>> >>> simple reference handling, there is no magic behind. >>> >>> Am Dienstag, 15. Oktober 2013 12:22:29 UTC+2 schrieb yougen zhuang: >>>> >>>> Before assign value to exports, module.exports === exports, but after >>>> assign value, they're not equal. In my view, they're point to the same >>>> reference. >>>> BTW, if I modify to module.exports.Rect = Rect, then module.exports === >>>> exports >>>> >>>> function Rect(w,h) { >>>> this.w = w; >>>> this.h = h; >>>> }; >>>> >>>> Rect.prototype.area = function(){ >>>> return this.w*this.h; >>>> }; >>>> >>>> console.log(module.exports === exports);//true >>>> module.exports = Rect; >>>> console.log(module.exports); >>>> console.log(exports); >>>> console.log(module.exports === exports);//false >>>> >>>> >>>> -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.