从javascript es6中的函数调用函数
我将es6 javascript与babel一起使用,并尝试使用xhr使用两个函数进行ajax调用,但得到一个错误从javascript es6中的函数调用函数,javascript,reactjs,es6-class,Javascript,Reactjs,Es6 Class,我将es6 javascript与babel一起使用,并尝试使用xhr使用两个函数进行ajax调用,但得到一个错误uncaughtTypeError:this.post不是一个函数 从es6 javascript中同一类中定义的另一个函数调用函数的正确语法是什么 谢谢你的回答这是我的密码 import alt from '../../alt'; import cookie from 'react-cookie'; class LoginActions { constructor(){
uncaughtTypeError:this.post不是一个函数
从es6 javascript中同一类中定义的另一个函数调用函数的正确语法是什么
谢谢你的回答这是我的密码
import alt from '../../alt';
import cookie from 'react-cookie';
class LoginActions {
constructor(){
this.generateActions(
'updatePassword',
'updateName',
'loginSuccess',
'loginFail',
'remember'
);
}
// Generic get request
post(url, data, callback) {
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
callback(null, xhr.responseText);
} else {
callback(xhr.statusText);
}
}
};
xhr.send(data);
}
// Get actual content
login(name, password, remember) {
var data = "name="+name+"&password="+password+"&remember="+remember;
this.post('api/login', data, function(err, data) {
if (!err) {
this.actions.loginSuccess(data.message);
} else {
this.actions.loginFail(JSON.parse(data.message));
}
}).bind(this);
}
}
export default alt.createActions(LoginActions);
Edit1:这就是我调用登录函数的方式/也将数据传递给上面的xhr请求
handleSubmit(event){
event.preventDefault();
var name = this.state.name;
var password = this.state.password;
var remember = this.state.remember;
LoginActions.login(name, password, remember);
}
您的方法login()
和post()
是实例方法,而不是静态方法。因此,您必须使用new
创建LoginActions
对象的实例,以便在该对象上正确调用这些方法
或者,如果您实际上不需要包含实例数据的实例,则将所有方法都设置为静态,并将它们称为LoginActions.post()
和LoginActions.login()
,而不使用this
相反,你在尝试混搭。您正在调用
LoginActions.login()
这是一个静态类型调用,然后在login()
的内部,您正在尝试引用这个假定了一个实例的。试试这些东西:
按照@jfriend00的建议,创建LoginAction类的实例并调用该类的login方法:
var loginAction=new LoginActions()代码>
loginAction.login(姓名、密码、记住)代码>
在LoginActions类中定义GenerationActions方法
this.post('api/login',数据,函数(err,data){
如果(!err){
this.actions.loginsAccess(data.message);
}否则{
this.actions.loginFail(JSON.parse(data.message));
}
}).约束(本)代码>
在这里,您似乎试图将此
绑定到回调。但实际上,您正在将这个绑定到post方法的返回值。要将此
绑定到回调,
this.post('api/login',数据,函数(err,data){
如果(!err){
this.actions.loginsAccess(data.message);
}否则{
this.actions.loginFail(JSON.parse(data.message));
}
}.约束(这个)代码>
请注意函数(){}.bind而不是post(函数(){}.bind)
你能告诉我你调用login
函数的方式吗?嗨@jfriend00,昨天在阅读了你的答案后,我继续使用superagent进行ajax调用,我能够使用这个.actions.
静态方法login()代码>在ajax请求结束后。但是今天我重新安装了节点模块,我又遇到了同样的问题this.actions.*
在login()
的静态方法中使用时给了我未定义的属性。。。发生什么事了?你能解释一下我能做些什么来解决这个问题吗?请阅读此文以进一步澄清@eersteam-您是否了解此
仅用于您使用新建
创建的对象实例,而不用于静态方法?这是Javascript中面向对象开发的基本概念。您需要了解,如果要使用this
,则需要对象的实例。