nodejs不能识别对象的function

我在node.js中构build了一个reddit API封装,以便更加熟悉js和node。 这是我的代码到目前为止:

./lib/reddit.js:

var request = require("request"); var reddit = function () { var self = this, userAgent = "node.js api wrapper", debug = false, uh = "", cookie = ""; self.getJSON = function (url, callback) { request(url, function (error, response, body) { if (!error && response.statusCode == 200) { callback(body); } }); }; self.post = function (url, data, callback) { request.post(url, { form: data }, function (error, response, body) { if (!error && response.statusCode == 200) { callback(body); } }); }; }; reddit.prototype = { login: function (username, password) { var data = { "user": username, "password": password, "rem": true }; this.post("http://www.reddit.com/api/login", data, function (body) { var response = JSON.parse(body); this.uh = response.json.data.modhash; this.cookie = response.json.data.cookie; console.log(response); console.log(this.uh); console.log(this.cookie); }); } } exports.reddit = reddit; 

app.js:

 var reddit = require("./lib.reddit").reddit; reddit.login("username", "password"); 

我得到这个错误:

 [jet@cowboybebop reddit]$ node app.js /home/jet/projects/reddit/app.js:5 reddit.login("username", "password"); ^ TypeError: Object function () { var self = this, userAgent = "node.js api wrapper", debug = false, uh = "", cookie = ""; self.getJSON = function (url, callback) { request(url, function (error, response, body) { if (!error && response.statusCode == 200) { callback(body); } }); }; self.post = function (url, data, callback) { request.post(url, { form: data }, function (error, response, body) { if (!error && response.statusCode == 200) { callback(body); } }); }; } has no method 'login' at Object.<anonymous> (/home/jet/projects/reddit/app.js:5:8) at Module._compile (module.js:449:26) at Object.Module._extensions..js (module.js:467:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.runMain (module.js:492:10) at process.startup.processNextTick.process._tickCallback (node.js:244:9) 

我原来的loginfunction定义如

 reddit.prototype.login = function () ..... 

但是这也行不通。 另一个SO问题build议格式化,就像我现在有,但它仍然不承认它。

 var reddit = require("./lib.reddit").reddit; var a = new reddit(); a.login("username", "password"); 

改变了我的想法这个问题。 并不是保留get,而是试图在一个没有通过混合两种风格的对象定义(作为函数和原型)实例化的函数中运行方法。 self.post不会存在,直到你实际实例化一个reddit对象。

我认为最好的办法是把你的self.post函数定义移动到一个原型中,这样你就可以把它作为一个静态方法,或者将你的login函数定义移动到函数定义中,并实际实例化对象以使用它的方法。

这个构造:

 var reddit = function () { }; 

只是定义一个函数,而不是一个类。 您需要new操作符来调用它并创build一个对象。 你可能想要使用这个:

 var reddit = new function () { }; 

它调用函数并创build(匿名)类的对象。 其余的代码应该是这样工作的!