Javascript 节点无法识别对象';s函数
我正在node.js中构建一个RedditAPI包装器,以便更加熟悉js和node。以下是我目前的代码: ./lib/reddit.js:Javascript 节点无法识别对象';s函数,javascript,node.js,prototype,Javascript,Node.js,Prototype,我正在node.js中构建一个RedditAPI包装器,以便更加熟悉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 =
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)
但这也不行。另一个SO问题建议将其格式化为我现在拥有的格式,但它仍然无法识别 我改变了对这个问题的看法。并不是get是保留的,而是您试图在一个函数中运行一个方法,而您还没有通过混合两种类型的对象定义(作为函数和原型)来实例化该函数。在实际实例化reddit对象之前,self.post不会存在
var reddit = require("./lib.reddit").reddit;
var a = new reddit();
a.login("username", "password");
我认为最好的方法是将self.post函数定义移动到原型中,以便将其用作静态方法,或者将登录函数定义移动到函数定义中,并实际实例化对象以使用其方法。此构造:
var reddit = function () { };
只是定义一个函数,而不是一个类。您需要new
操作符来调用它并创建一个对象。您可能希望使用以下选项:
var reddit = new function () { };
它调用函数并创建(匿名)类的对象。代码的其余部分应该按原样工作 我觉得这很简单。如果你加上这个作为回答,我会为你接受的。你几乎没有打败其他人!谢谢大家!
var reddit = new function () { };