Javascript 如何从同一类中的另一个函数调用函数
我是javascript新手,不知道如何解决这个问题。我目前正在尝试创建一个小型个人推特机器人,在新推特上“提醒”我,查看新的关注者等。我正在使用node.js和npm包Twit编写这个机器人。我目前正在尝试创建一个创建新tweet的函数。我的问题是,如果我尝试运行代码,node.js会出错 这是我的bot.js文件Javascript 如何从同一类中的另一个函数调用函数,javascript,node.js,Javascript,Node.js,我是javascript新手,不知道如何解决这个问题。我目前正在尝试创建一个小型个人推特机器人,在新推特上“提醒”我,查看新的关注者等。我正在使用node.js和npm包Twit编写这个机器人。我目前正在尝试创建一个创建新tweet的函数。我的问题是,如果我尝试运行代码,node.js会出错 这是我的bot.js文件 var config = require("./app/config"); var TwitterBot = require("./app/classes/TwitterBot")
var config = require("./app/config");
var TwitterBot = require("./app/classes/TwitterBot");
var Twit = require("twit");
var T = new Twit(config);
var app = new TwitterBot(T);
app.tweet({ text: 'This is my test Tweet.' });
我的班级档案
module.exports = class TwitterBot {
constructor(T) {
this.T = T;
this.colors = require('colors/safe');
console.log("Class works");
}
tweet(data) {
this.T.post(
'statuses/update',
{ status: data.text },
function(err, data, response) {
if (err) {
this.error("Something went wrong");
} else {
this.success("Tweet successfully created");
}
}
);
}
error(something) {
console.log("Error: " + something);
// This is just an example in my code it performs a switch function
}
success(something) {
console.log("Success: " + something);
// This is just an example in my code it performs a switch function
}
}
我的错误:
Class works
C:\Users\Colin\Desktop\Twitter-Bot\app\classes\TwitterBot.js:14
this.error('tweet', err);
^
TypeError: Cannot read property 'error' of undefined
at C:\Users\Colin\Desktop\Twitter-Bot\app\classes\TwitterBot.js:14:15
at C:\Users\Colin\Desktop\Twitter-Bot\node_modules\twit\lib\twitter.js:118:13
at onRequestComplete (C:\Users\Colin\Desktop\Twitter-Bot\node_modules\twit\lib\twitter.js:324:7)
at Request.<anonymous> (C:\Users\Colin\Desktop\Twitter-Bot\node_modules\twit\lib\twitter.js:341:7)
at emitOne (events.js:101:20)
at Request.emit (events.js:188:7)
at Gunzip.<anonymous> (C:\Users\Colin\Desktop\Twitter-Bot\node_modules\request\request.js:1001:12)
at Gunzip.g (events.js:291:16)
at emitNone (events.js:91:20)
at Gunzip.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
但在javascript中,它似乎不是这样工作的。有人能帮我解决这个问题吗?您可以通过绑定传递给
this.T.post()的回调函数或使用arrow函数来避免这个问题。将tweet
方法更改为:
tweet(data) {
this.T.post(
'statuses/update',
{ status: data.text },
(err, data, response) => { // this line got changed
if (err) {
this.error("Something went wrong");
} else {
this.success("Tweet successfully created");
}
}
);
}
使用箭头功能。function(){}
表示法的一个问题是它将this
更改为窗口对象。如果改为使用()=>{}
,则此
引用应保持您希望的值(例如,您的类)
这里有一组关于的文档。请特别注意有关箭头函数在处理类变量方面的差异的引用,如this
和super
唯一可能的缺点是,箭头功能在ES6之前的语言环境中不起作用,因此如果您的项目中需要广泛的浏览器支持,您可能需要使用Babel之类的transpiler。考虑到它是一个服务器端应用程序,我怀疑这会是一个问题。非常感谢您的快速回答,现在它工作得非常好,而且由于浏览器支持,这只是一个只有我在终端(cmd)中使用的小型个人机器人。再次感谢您,祝您度过愉快的一天:)@Truzze当然!祝你度过愉快的一天,别忘了接受我或艾德霍尔德的答案,这样人们就会知道如果他们遇到同样的问题该怎么办!谢谢你的快速回答,这正是我所需要的,效果非常好。我选择接受用户@furkle的答案,因为他提供了更多信息,但你的答案也是正确的。再次感谢您,祝您度过愉快的一天。:)
tweet(data) {
this.T.post(
'statuses/update',
{ status: data.text },
(err, data, response) => { // this line got changed
if (err) {
this.error("Something went wrong");
} else {
this.success("Tweet successfully created");
}
}
);
}