es6关于在constructor中new对象为属性的问题,报错

发布于 2022-09-04 06:11:23 字数 921 浏览 35 评论 0

import UserService from  './UserService';

export default class Controller {

  constructor() {
    this.userService = new UserService(); //初始化service
  }

  login(req, res, next) {
    var user = {'account': 'zhangsan', 'pwd': '123'};
    this.userService
      .login(user)
      .then((result)=>{
        // console.log(result);
        res.json(user);
      })
      .catch((error)=>{
        console.log(error);
      });
  
  }

}

报错如下

clipboard.png
而如果我把new UserService()去掉,改为在login里 new UserService().login(user)就没有问题,但是却似乎违反了面向对象的原则。 我目的是想实现初始化的时候只有一个控制器和一个UserService,而不是每次登陆都要new一个UserService出来。请求高玩指点迷津!

附:给予看到此贴的朋友
结果为this指向问题,可参考
https://segmentfault.com/q/10...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

过期情话 2022-09-11 06:11:23

可能是this 丢失了,试试

constructor() {
    this.userService = new UserService();
    this.login = this.login.bind(this);
}
北斗星光 2022-09-11 06:11:23

基本上按你的代码恢复出来的下面的代码没有问题,所以你最好确认一下是哪里的 userService 调用出现了问题。

class UserService {
    login() {
        return Promise.resolve("login");
    }
}

class Controller {

    constructor() {
        this.userService = new UserService(); //初始化service
    }

    login(req, res, next) {
        var user = { "account": "zhangsan", "pwd": "123" };
        this.userService
            .login(user)
            .then((result) => {
                console.log(result);
                // res.json(user);
            })
            .catch((error) => {
                console.log(error);
            });

    }
}

new Controller().login();
梅窗月明清似水 2022-09-11 06:11:23
 constructor() {
       super();
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文