ES6环境下跨JS文件调用对象数据遇异常,求解决方案
问题排查与修复方案
我来帮你梳理下代码里的问题,这几个错误导致了程序执行时的异常:
1. Users类的方法定义不规范
ES6类中定义成员方法不能用var关键字,直接写方法名即可;另外你代码里的Newuser没有用let/const声明,会变成全局变量,这不仅不符合规范,还可能引发意外问题。
2. 错误地直接访问实例属性而非调用方法
你创建了Users类的实例newie,但firstName并不是Users实例的属性——它是User()方法返回的对象里的属性,所以必须先调用User()方法才能拿到数据。
3. 导入路径可能不匹配
login.js里写的导入路径是../data/user,但你的源文件名叫users.js,路径需要和文件名对应上,否则会找不到模块。
4. 命名风格不一致(可选但建议修正)
lastname用了小写n,和firstName的驼峰命名不一致,统一成lastName会让代码更易读。
修正后的代码
users.js
export default class Users { // 正确定义类方法,去掉多余的var关键字 User() { // 用const声明变量,避免全局污染 const newUser = { firstName: 'Tony', lastName: 'franklyn', // 统一驼峰命名 email: 'franky@gmail.com', password: 'Franklin123' }; return newUser; } }
login.js
// 修正导入路径,匹配users.js文件名 import Users from '../data/users'; // 实例化Users类,调用User方法获取用户数据 const userInstance = new Users(); const userData = userInstance.User(); export default class Signup { async Register() { // 使用userData中的firstName属性 await t.typeText(this.firstName, userData.firstName); } }
额外优化建议
如果User()方法只是用来生成固定的用户数据,没必要每次都实例化类,可以把它改成静态方法,这样不用创建实例就能直接调用:
优化后的users.js
export default class Users { // 定义静态方法 static User() { const newUser = { firstName: 'Tony', lastName: 'franklyn', email: 'franky@gmail.com', password: 'Franklin123' }; return newUser; } }
对应优化的login.js
import Users from '../data/users'; // 直接调用静态方法,无需实例化 const userData = Users.User(); export default class Signup { async Register() { await t.typeText(this.firstName, userData.firstName); } }
内容的提问来源于stack exchange,提问作者Akeem
相关产品推荐
相关产品推荐

