JS新手求助:TypeError: _user2.default is not a constructor报错问题
解决TypeError: _user2.default is not a constructor的问题
嘿,我懂你现在踩的坑啦——你把普通对象当成构造函数来实例化了,这就是为啥会抛出这个错误!咱们一步步理清楚:
问题根源
先看你的users.js,你导出的是newuser这个已经创建好的普通对象:
var newuser = { firstname:'Tony', lastname: 'franklyn', email: `franky@gmail.com`, password: 'Franklin123', }; module.exports = { newuser };
而在你的sign up文件里,你写了const newUser = new news();——这里的new关键字是用来实例化构造函数(比如用function或class定义的可生成实例的函数)的,但你导入的news只是一个包含普通对象的模块,根本不是构造函数,所以JS会报错说它不是构造函数。
两种解决方法
方法一:直接引用导出的现成对象(适合你当前需求)
既然你已经在users.js里定义好了newuser对象,直接导入后访问它的属性就行,完全不需要用new:
修改sign up文件的代码:
// 写法1:解构导入(更直观) import { newuser } from './users.js'; // 直接用对象的firstname属性 .typeText(newuser.firstname) // 写法2:整体导入 import userData from './users.js'; // 通过属性访问 .typeText(userData.newuser.firstname)
注意:你原来写的Newuser.firstname大小写不对,变量名是newuser(小写开头),要和定义的保持一致。
方法二:改成构造函数(如果需要生成多个用户实例)
要是你本来的目的是想创建可复用的用户模板,那可以把newuser改成构造函数:
修改users.js:
// 定义构造函数(惯例首字母大写) function Newuser(firstname, lastname, email, password) { this.firstname = firstname; this.lastname = lastname; this.email = email; this.password = password; } // 导出构造函数 module.exports = { Newuser };
然后在sign up文件里:
import { Newuser } from './users.js'; // 用new实例化一个新用户 const newUser = new Newuser('Tony', 'franklyn', 'franky@gmail.com', 'Franklin123'); // 访问实例的firstname属性 .typeText(newUser.firstname)
不过看你最初的代码,只是想引用一个现成的用户对象属性,所以方法一完全够用啦~
内容的提问来源于stack exchange,提问作者Akeem
相关产品推荐
相关产品推荐

