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(匿名)类的对象。 其余的代码应该是这样工作的!
- Node.js原型inheritance
- 无法看到从子对象添加到原型的属性
- 为什么JSON.stringify不序列化原型值?
- 如何在mongoose中扩展查询对象
- Object.create(BaseObject)和util.inherits(MyObject,BaseObject)有什么区别?
- JavaScript:为什么getOwnPropertyDescriptor()包含自定义的inheritance属性?
- instanceof在节点4中评估为真,但不在节点6中评估
- 如何使用Prototype Ajax.request捕获stream结果
- JavaScript中的JavaScript原型对象效率